Én használ a pyqt4 keret némi kijelzők adatbázis formájában. Sajnos elakadna, miközben próbáljuk kiszűrni, és megjeleníti az adatbázis szerint vezetéknevét. Tegyük fel, hogy az adatbázis-kapcsolat működik. Feltételezzük, hogy van a megfelelő mennyiségű tételek én tupleHeader mióta ugyanazt initializeModel módszert más módszerekkel (például a keresés () függvény az alábbiakban leírt, és ez jól működik.
Hívom a kijelző () függvényt és működik tökéletesen, de ha létre proxyModel a sourceModel, és próbálják megjeleníteni a proxyModel én keresési funkció, van üres cellák jelennek meg. Mikor korlátozhatja a keresést úgy, hogy kiszűri a fele az adatbázis, azt mutatja, hogy sok sejtek (így a legtöbb ez működik). De ez nem jelenik meg semmi magából az adatbázisból.
Az alábbiakban néhány kódomat:
from PyQt4 import QtGui, QtCore, QtSql
self.caseSensitivity = QtCore.Qt.CaseInsensitive
self.syntax = QtCore.QRegExp.FixedString
def initializeModel(self, model):
model.setTable(self.table)
#model.setEditStrategy(QtSql.QSqlTableModel.OnManualSubmit)
b = 0
for a in self.tupleHeader:
model.setHeaderData(b, QtCore.Qt.Horizontal, QtGui.qApp.tr(a))
b += 1
model.select()
def display(self):
'''reads all row data and displays it on a tableview'''
self.connectdb(self.db, self.localhost, self.dbname, self.username, self.password)
model = QtSql.QSqlTableModel()
self.initializeModel(model)
self.view.setModel(model)
self.disconnectdb(self.db)
def search(self, searchQuery):
'''queries database data, filters it, and displays it on a tableview'''
sourceModel = QtSql.QSqlTableModel()
proxyModel = QtGui.QSortFilterProxyModel()
self.initializeModel(sourceModel)
proxyModel.setSourceModel(sourceModel) # allows to edit proxyModel without changing underying model
#searchQuery contains the last name that I am filtering with
regExp = QtCore.QRegExp(searchQuery, self.caseSensitivity, self.syntax)
proxyModel.setFilterRegExp(regExp)
proxyModel.setFilterKeyColumn(2) # this column holds the last names
# self.view contains the table itemview my application uses to display the database
self.view.setModel(proxyModel)
EDIT: Nem vagyok érdekelt tartani ezt a kódrészletet, én csak azt szeretném tudni, hogy miért teszi az asztalra, hogy bemutassák a táblázat tartalmát, hanem egy csomó üres cellák
print self.proxyModel.filterAcceptsRow(2, self.sourceModel)
Továbbá, ha ebbe a után az utolsó állítás (self.view.setModel (proxyModel)), akkor megjelenik az asztalon, még ha nem küld hibaüzenetet:
nyomtatási self.proxyModel.filterAcceptsRow (2, self.sourceModel) Típushiba: QSortFilterProxyModel.filterAcceptsRow (int, QModelIndex): argumentum 2 nem várt típusú 'QSqlTableModel'
Nem számít, milyen érvek e, vagy azt használja filterAcceptsRow ro filterAcceptsColumn, megjeleníti az asztalra. Vajon ez szűkíti a probléma is?
Köszönöm, hogy időt keresi a kódolási hiba / bug, és boldog vadászatot!