PyQt4: My veritabanı boş hücreleri görüntüler

oy
48

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!

Oluştur 08/06/2010 saat 11:56
kullanıcı
Diğer dillerde...                            


1 cevaplar

oy
0

Benim sorununa çözüm bulamadı da, kendisini çözüldü. Emin değilim, ama o iş yapılmış bu kod parçacığı olduğunu düşünüyorum.

self.dbmanip = CoreDB(self.userTableView, self.table)

Bu QT4 Designer tarafından oluşturulan setupUI () metodunun içine konulmuştur. Bence ya TableView içeriyordu dbmanip proxyModel bilgi kaybetmiş, ya da (daha büyük olasılıkla), ben proxyModel ve (proxyModel oluşturulan) orijinal Modeli arasındaki yanlış tablo başvurulan olabilir ve sonra çünkü görüntüleyemeyeceğiniz o bir tablodan hücre yapısını ve başka gerçek bilgiler çağırıyordu.

Bunlar olsa tüm tahminler bulunmaktadır. Yine, sorun çözüldü.

Cevap 10/06/2010 saat 12:15
kaynak kullanıcı

Cookies help us deliver our services. By using our services, you agree to our use of cookies. Learn more