Jun-02-2022, 06:49 PM
a simple filter example
from PyQt5 import QtCore, QtGui, QtWidgets, QtSql class Widget(QtWidgets.QWidget): def __init__(self, parent=None): super().__init__(parent) self.setGeometry(50, 50, 800, 600) self.edit = QtWidgets.QLineEdit() self.combo = QtWidgets.QComboBox() self.table = QtWidgets.QTableView() self.model = QtSql.QSqlTableModel() self.table.setModel(self.model) grid = QtWidgets.QGridLayout(self) grid.addWidget(self.edit, 0, 0) grid.addWidget(self.combo, 0, 1) grid.addWidget(self.table, 1, 0, 1, 2) self.model.setTable("items") self.model.select() self.combo.clear() for i in range(self.model.columnCount()): self.combo.addItem(self.model.headerData(i, QtCore.Qt.Horizontal)) self.combo.setCurrentIndex(1) self.edit.textChanged.connect(self.filter_table) def filter_table(self, text): f = " {} LIKE '%{}%'".format(self.combo.currentText(), text.lower()) if text else text self.model.setFilter(f) self.model.select() def main(): import sys app = QtWidgets.QApplication(sys.argv) db = QtSql.QSqlDatabase.addDatabase("QSQLITE") db.setDatabaseName("inventory.db") if not db.open(): sys.exit(-1) ex = Widget() ex.show() sys.exit(app.exec_()) if __name__ == "__main__": main()