import sys
from functools import partial
from typing import Optional
from PyQt5 import QtCore
Qt
def __init__
(self, parent
: Optional
[QObject] = None
) -> None
: super().__init__(parent=parent)
self.headers = ['Nummer', 'Name', 'Gemeinde']
self.data = [
('010006', 'Alt Duvenstedt', 'Alt Duvenstedt'),
('010010', 'Altenhof', 'Altenhof'),
('010012', 'Altwickenbeck (Neuw)', 'Neuwittenbeck'),
('010021', 'Bargstedt', 'Bargstedt'),
('010023', 'Barkelsby', 'Barkelsby'),
('010024', 'Basdorf (Rie)', 'Rieseby'),
]
def headerData(self, section: int, orientation: Qt.Orientation, role: int = ...):
if orientation == Qt.Horizontal and role == Qt.DisplayRole:
return self.headers[section]
def columnCount
(self, parent
: QModelIndex = ...
) ->
int: return len(self.headers)
return len(self.data)
if role == Qt.DisplayRole:
return self.data[index.row()][index.column()]
def __init__
(self, parent
: Optional
[QWidget] = None
) -> None
: super().__init__(parent=parent)
self.setFocusPolicy(Qt.StrongFocus)
# self.setEditable(True)
# self.filterModel = QSortFilterProxyModel(self)
# self.filterModel.setFilterCaseSensitivity(Qt.CaseInsensitive)
self.setView(self.tableView)
self.tableView.setSortingEnabled(True)
self.tableView.setAutoScroll(False)
self.tableView.horizontalHeader().setStretchLastSection(True)
self.tableView.verticalHeader().hide()
# self.completer = QCompleter(self)
# self.completer.setCompletionMode(QCompleter.UnfilteredPopupCompletion)
# self.completer.setPopup(self.tableView)
# self.completer.setModel(self.filterModel)
# self.setCompleter(self.completer)
# self.lineEdit().textEdited.connect(self.filterModel.setFilterFixedString)
# self.completer.activated.connect(self.onCompleterActivated)
super().setModel(model)
# self.filterModel.setSourceModel(model)
# self.completer.setModel(self.filterModel)
self.tableView.resizeColumnsToContents()
self.tableView.resizeRowsToContents()
self.tableView.setMinimumWidth(self.tableView.horizontalHeader().length())
self.setMinimumWidth(100)
def setModelColumn(self, column):
super().setModelColumn(column)
# self.filterModel.setFilterKeyColumn(column)
# self.completer.setCompletionColumn(column)
# def onCompleterActivated(self, text):
# if text:
# index = self.findText(str(text))
# self.setCurrentIndex(index)
def setModelIndex
(index
: int, target
: QComboBox): target.blockSignals(True)
target.setCurrentIndex(index)
target.blockSignals(False)
if __name__ == '__main__':
model = MyModel()
sortModel.setFilterCaseSensitivity(Qt.CaseInsensitive)
sortModel.sort(1, Qt.AscendingOrder)
sortModel.setSourceModel(model)
combobox = MyCombobox()
combobox.setModel(sortModel)
combobox.setModelColumn(0)
combobox2 = MyCombobox()
combobox2.setModel(sortModel)
combobox2.setModelColumn(1)
combobox.currentIndexChanged.connect(partial(setModelIndex, target=combobox2))
combobox2.currentIndexChanged.connect(partial(setModelIndex, target=combobox))
layout.
addWidget(QLabel('Nummer')) layout.addWidget(combobox)
layout.
addWidget(QLabel('Name')) layout.addWidget(combobox2)
layout.addStretch(10)
widget.setWindowTitle('Synchronized comboboxes with shared model')
widget.setFixedWidth(500)
widget.setLayout(layout)
widget.show()
sys.exit(app.exec_())