PyQt4: मेरा डेटाबेस रिक्त कक्षों को प्रदर्शित करता है

वोट
48

मैं PyQt4 ढांचे का उपयोग कर रहा डेटाबेस रूपों के लिए कुछ करने के लिए प्रदर्शित करता है। दुर्भाग्य से, मैं कोई समस्या को फ़िल्टर और अंतिम नाम के आधार पर अपने डेटाबेस को प्रदर्शित करने का प्रयास करते समय मारा। मान लें कि डेटाबेस कनेक्शन काम करता है। यह भी मान लें कि मैं अपने tupleHeader में आइटम की सही मात्रा में है के बाद से मैं (नीचे वर्णित खोज () फंक्शन की तरह अन्य तरीकों के लिए एक ही initializeModel विधि का उपयोग करें, और यह ठीक काम करता है।

मैं प्रदर्शन () फ़ंक्शन को कॉल करें और यह पूरी तरह से ठीक काम करता है, लेकिन जब sourceModel से एक proxyModel बनाने, और मेरी खोज समारोह के साथ proxyModel प्रदर्शित करने के लिए कोशिश कर रहा है, मैं रिक्त कक्षों का प्रदर्शन किया है। जब मैं अपने खोज को सीमित इतना है कि यह मेरी आधा डेटाबेस फिल्टर, यह पता चलता है कि कई कोशिकाओं (तो इस का सबसे काम कर रहा है)। लेकिन यह डेटाबेस से ही कुछ भी नहीं दिखाया जाएगा।

नीचे मेरी कोड के कुछ है:

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)

संपादित करें: मैं कोड के इस टुकड़े रखने में दिलचस्पी नहीं है, मैं सिर्फ जानना चाहता है कि इसे खाली कोशिकाओं का एक समूह के बजाय तालिका की सामग्री को दिखाने के लिए अनुमति देता है तालिका चाहते हैं

print self.proxyModel.filterAcceptsRow(2, self.sourceModel)

इसके अलावा, अगर आप पिछले बयान (self.view.setModel (proxyModel)) के बाद इस में डाल दिया, यह तालिका दिखाएगा, भले ही यह एक त्रुटि भेजता है:

प्रिंट self.proxyModel.filterAcceptsRow (2, self.sourceModel) लेखन त्रुटि: QSortFilterProxyModel.filterAcceptsRow (पूर्णांक, QModelIndex): तर्क 2 है अप्रत्याशित प्रकार 'QSqlTableModel'

इससे कोई फर्क नहीं पड़ता कि तर्क हैं या कि क्या मैं filterAcceptsRow ro filterAcceptsColumn उपयोग करें, यह तालिका प्रदर्शित करता है। इस समस्या को कुछ को कम करता है?

अपना समय इस कोडिंग त्रुटि / बग, और खुश शिकार के लिए खोज के लिए धन्यवाद!

08/06/2010 को 11:56
उपयोगकर्ता
अन्य भाषाओं में...                            


1 जवाब

वोट
0

जबकि मैं अपनी समस्या का समाधान नहीं मिल सकता है, यह अपने आप हल किया। मैं निश्चित नहीं हूँ, लेकिन मुझे लगता है कि इस कोड स्निपेट कि यह काम किया जाता था।

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

यह क्यूटी 4 डिजाइनर द्वारा बनाई गई विधि SetupUi () के अंदर रखा गया था। मुझे लगता है कि या तो dbmanip कि tableview निहित proxyModel से जानकारी खो दिया है, या (अधिक होने की संभावना), मैं proxyModel और मूल मॉडल (कि proxyModel बनाया) के बीच गलत तालिका संदर्भित हो सकता है, और फिर क्योंकि प्रदर्शित नहीं कर सका यह एक मेज से कोशिका की संरचना और एक अन्य से वास्तविक जानकारी बुला रहा था।

ये सभी अनुमान हालांकि रहे हैं। फिर भी, समस्या हल हो।

10/06/2010 को 12:15
का स्रोत उपयोगकर्ता

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