Ben veritabanı formları için bazı görüntüler yapmak PyQt4 çerçevesini kullanıyorum. filtrelemek ve soyadına göre benim veritabanını görüntülemek isterken Ne yazık ki, bir pürüz çıktı. veritabanı bağlantısı çalıştığını varsayalım. Ayrıca aşağıda açıklanan arama () fonksiyonu gibi (diğer yöntemler için aynı initializeModel yöntemi kullanmak beri benim tupleHeader öğelerin doğru miktarda olduğunu varsayalım, ve iyi çalışıyor.
Ben display () işlevini çağırır ve mükemmel çalışıyor, ancak sourceModel bir proxyModel oluşturma ve benim arama fonksiyonu ile proxyModel görüntülemeye çalışırken, ben boş hücreler görüntülenir var. yarım benim veritabanını filtreler böylece benim aramayı kısıtlamak zaman, birçok hücreleri (yani bu çoğu çalışıyor) olduğunu göstermektedir. Ama veritabanından kendisinden bir şey göstermez.
Aşağıda kodumu bazıları ise:
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)
DÜZENLEME: Bu kod parçasını tutarak ilgi değilim, ben sadece boş hücre bir demet yerine tablonun içeriğini göstermek için tablo verir neden bilmek istiyorum
print self.proxyModel.filterAcceptsRow(2, self.sourceModel)
Geçen açıklamada (self.view.setModel (proxyModel)) sonra bu koymak eğer Ayrıca, buna bir hata göndermek bile, tablo gösterecektir:
Baskı self.proxyModel.filterAcceptsRow (2, self.sourceModel) TypeError: QSortFilterProxyModel.filterAcceptsRow (int, QModelIndex): argüman 2 sahiptir beklenmedik tipi 'QSqlTableModel'
Argümanlar veya ben filterAcceptsRow ro filterAcceptsColumn kullanmak ister, bu tablo görüntüler fark etmez. Bu sorunu bazı daraltmak mu?
Bu kodlama hatası / hata ve mutlu avcılık ararken Zaman ayırdığınız için teşekkür ederiz!