Já používám rámec pyqt4 udělat nějaké displeje pro databázové formuláře. Bohužel, Trefil jsem na problém při pokusu o filtrovat a zobrazovat svou databázi příjmení. Předpokládejme, že připojení k databázi funguje. Také předpokládejme, že mám správné množství bodů v mém tupleHeader protože jsem použít stejnou metodu pro initializeModel jinými metodami (například funkce vyhledávání () popsané níže, a funguje to dobře.
I volání funkce display () a funguje to naprosto v pořádku, ale při vytváření proxyModel z sourceModel, a snaží se zobrazí proxyModel s mým vyhledávací funkce, mám zobrazí prázdné buňky. Když jsem se omezit mé vyhledávání tak, že filtruje půlku databáze ukazuje, že mnohé buňky (takže většina z toho se pracuje). Ale nebude to nic z databáze samotné zobrazení.
Níže je některé z mých kód:
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ám zájem udržet tento kus kódu, jen chci vědět, proč to umožňuje tabulku zobrazit obsah v tabulce namísto spoustu prázdných buněk
print self.proxyModel.filterAcceptsRow(2, self.sourceModel)
Také, pokud si dát v tomto po posledním příkazu (self.view.setModel (proxyModel)), zobrazí se tabulka, i když to poslat chybu:
tisk self.proxyModel.filterAcceptsRow (2, self.sourceModel) TypeError: QSortFilterProxyModel.filterAcceptsRow (int, QModelIndex): argument, 2 má neočekávaný typ 'QSqlTableModel'
Nezáleží na tom, jaké jsou argumenty, nebo jestli mám použít filterAcceptsRow ro filterAcceptsColumn se zobrazí v tabulce. Znamená to zúžit problém nějaké?
Děkuji za váš čas hledá pro tento kódovací chyby / chyba, a šťastný lov!