class ExtendedCombo(QComboBox): def __init__(self, parent=None): super(ExtendedCombo, self).__init__(parent) self.setFocusPolicy(Qt.StrongFocus) self.setEditable(True) self.completer = QCompleter(self) self.selected_id = None # always show all completions self.completer.setCompletionMode(QCompleter.UnfilteredPopupCompletion ) self.pFilterModel = QSortFilterProxyModel(self) self.pFilterModel.setFilterCaseSensitivity(Qt.CaseInsensitive) self.completer.setPopup(self.view()) self.setCompleter(self.completer) self.lineEdit().textEdited[unicode].connect(self.pFilterModel.setFilterFixedString) self.completer.activated.connect(self.setTextIfCompleterIsClicked) self.currentIndexChanged.connect(self.currentSelected) def setModel( self, model ): super(ExtendedCombo, self).setModel( model ) self.pFilterModel.setSourceModel( model ) self.completer.setModel(self.pFilterModel) def setModelColumn( self, column): self.completer.setCompletionColumn( column ) self.pFilterModel.setFilterKeyColumn( column ) super(ExtendedCombo, self).setModelColumn( column ) def view(self): return self.completer.popup() def index(self): return self.currentIndex() def setTextIfCompleterIsClicked(self, text): if text: index = self.findText(text) self.setCurrentIndex(index) def currentSelected(self, text): if text: self.selected_id = self.currentText()
class ExtendedComboBox(QComboBox): """ Based off the extension of the combo box from below: http://stackoverflow.com/questions/4827207/how-do-i-filter-the-pyqt-qcombobox-items-based-on-the-text-input """ def __init__(self, parent=None): super(ExtendedComboBox, self).__init__(parent) self.setFocusPolicy(Qt.StrongFocus) self.setEditable(True) self.setEditable(True) self.completer = QCompleter(self) # always show all completions self.completer.setCompletionMode(QCompleter.PopupCompletion) self.pFilterModel = QSortFilterProxyModel(self) self.pFilterModel.setFilterCaseSensitivity(Qt.CaseInsensitive) self.completer.setPopup(self.view()) self.setCompleter(self.completer) self.lineEdit().textEdited[unicode].connect( self.pFilterModel.setFilterFixedString) self.completer.activated.connect(self.setTextIfCompleterIsClicked) def setModel(self, model): super(ExtendedComboBox, self).setModel(model) self.pFilterModel.setSourceModel(model) self.completer.setModel(self.pFilterModel) def setModelColumn(self, column): self.completer.setCompletionColumn(column) self.pFilterModel.setFilterKeyColumn(column) super(ExtendedComboBox, self).setModelColumn(column) def view(self): return self.completer.popup() def index(self): return self.currentIndex() def setTextIfCompleterIsClicked(self, text): if text: index = self.findText(text) self.setCurrentIndex(index)
class ExtendedComboBox(QComboBox): """ Based off the extension of the combo box from below: http://stackoverflow.com/questions/4827207/how-do-i-filter-the-pyqt-qcombobox-items-based-on-the-text-input """ def __init__(self, parent = None): super(ExtendedComboBox, self).__init__(parent) self.setFocusPolicy(Qt.StrongFocus) self.setEditable(True) self.setEditable(True) self.completer = QCompleter(self) # always show all completions self.completer.setCompletionMode(QCompleter.PopupCompletion) self.pFilterModel = QSortFilterProxyModel(self) self.pFilterModel.setFilterCaseSensitivity(Qt.CaseInsensitive) self.completer.setPopup(self.view()) self.setCompleter(self.completer) self.lineEdit().textEdited[unicode].connect(self.pFilterModel.setFilterFixedString) self.completer.activated.connect(self.setTextIfCompleterIsClicked) def setModel(self, model): super(ExtendedComboBox, self).setModel( model ) self.pFilterModel.setSourceModel( model ) self.completer.setModel(self.pFilterModel) def setModelColumn(self, column): self.completer.setCompletionColumn(column) self.pFilterModel.setFilterKeyColumn(column) super(ExtendedComboBox, self).setModelColumn(column) def view(self): return self.completer.popup() def index(self): return self.currentIndex() def setTextIfCompleterIsClicked(self, text): if text: index = self.findText(text) self.setCurrentIndex(index)
class ExtendedComboBox( QComboBox ): def __init__( self, parent = None): super( ExtendedComboBox, self ).__init__( parent ) self.setFocusPolicy( Qt.StrongFocus ) self.setEditable( True ) # add a filter model to filter matching items self.pFilterModel = QSortFilterProxyModel( self ) self.pFilterModel.setFilterCaseSensitivity( Qt.CaseInsensitive ) self.pFilterModel.setSourceModel(self.model()) # add a completer, which uses the filter model self.completer = QCompleter(self.pFilterModel, self) # always show all completions self.completer.setCompletionMode( QCompleter.UnfilteredPopupCompletion ) self.completer.setPopup( self.view() ) self.setCompleter( self.completer ) self.lineEdit().textEdited[unicode].connect( self.pFilterModel.setFilterFixedString ) self.completer.activated.connect(self.on_completer_activated) def setModel( self, model ): super(ExtendedComboBox, self).setModel( model ) self.pFilterModel.setSourceModel( model ) self.completer.setModel(self.pFilterModel) def setModelColumn( self, column ): self.completer.setCompletionColumn( column ) self.pFilterModel.setFilterKeyColumn( column ) super(ExtendedComboBox, self).setModelColumn( column ) def view( self ): return self.completer.popup() def index( self ): return self.currentIndex() def on_completer_activated(self, text): if text: index = self.findText(text) self.setCurrentIndex(index)
class SearchPanel(QComboBox): def __init__(self, model, parent=None, showTable=False): super(SearchPanel, self).__init__(parent) self.tabla = None self.setFocusPolicy(Qt.StrongFocus) self.setEditable(True) # self.setModel( model ) self.setEditable(True) self.completer = QCompleter(self) # always show all completions self.completer.setCompletionMode(QCompleter.UnfilteredPopupCompletion) self.pFilterModel = QSortFilterProxyModel(self) self.pFilterModel.setFilterCaseSensitivity(Qt.CaseInsensitive) self.showTable = showTable if model != None: self.setModel(model) # self.pFilterModel.setSourceModel( model ); self.completer.setModel(self.pFilterModel) self.completerTable = SearchPanelView() self.completer.setPopup(self.completerTable) # Mostrar el Popup en forma de Tabla if self.showTable: self.tabla = SearchPanelView() self.setView(self.tabla) self.setCompleter(self.completer) self.setColumn(1) self.lineEdit().textEdited[unicode].connect( self.pFilterModel.setFilterFixedString if not showTable else self.pFilterModel.setFilterWildcard ) def setModel(self, model): QComboBox.setModel(self, model) self.pFilterModel.setSourceModel(model) def setColumn(self, column): self.setModelColumn(1) self.completer.setCompletionColumn(column) self.pFilterModel.setFilterKeyColumn(column) self.setModelColumn(column) def view(self): return self.completer.popup() def data(self): return self.currentIndex() def index(self): return self.currentIndex() def setColumnHidden(self, col): self.completerTable.hiddenColumns.append(col) if self.showTable: self.tabla.hiddenColumns.append(col) def setMinimumWidth(self, width): self.completerTable.setMinimumWidth(width) if self.showTable: self.tabla.setMinimumWidth(width)
class SearchPanel(QComboBox): def __init__(self, model, parent=None, showTable=False): super(SearchPanel, self).__init__(parent) self.tabla = None self.setFocusPolicy(Qt.StrongFocus) self.setEditable(True) # self.setModel( model ) self.setEditable(True) self.completer = QCompleter(self) # always show all completions self.completer.setCompletionMode(QCompleter.UnfilteredPopupCompletion) self.pFilterModel = QSortFilterProxyModel(self) self.pFilterModel.setFilterCaseSensitivity(Qt.CaseInsensitive) self.showTable = showTable if model != None: self.setModel(model) # self.pFilterModel.setSourceModel( model ); self.completer.setModel(self.pFilterModel) self.completerTable = SearchPanelView() self.completer.setPopup(self.completerTable) #Mostrar el Popup en forma de Tabla if self.showTable: self.tabla = SearchPanelView() self.setView(self.tabla) self.setCompleter(self.completer) self.setColumn(1) self.lineEdit().textEdited[unicode].connect( self.pFilterModel.setFilterFixedString if not showTable else self. pFilterModel.setFilterWildcard) def setModel(self, model): QComboBox.setModel(self, model) self.pFilterModel.setSourceModel(model) def setColumn(self, column): self.setModelColumn(1) self.completer.setCompletionColumn(column) self.pFilterModel.setFilterKeyColumn(column) self.setModelColumn(column) def view(self): return self.completer.popup() def data(self): return self.currentIndex() def index(self): return self.currentIndex() def setColumnHidden(self, col): self.completerTable.hiddenColumns.append(col) if self.showTable: self.tabla.hiddenColumns.append(col) def setMinimumWidth(self, width): self.completerTable.setMinimumWidth(width) if self.showTable: self.tabla.setMinimumWidth(width)