PyQt4: Můj databáze zobrazí prázdné buňky

hlasů
48

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!

Položena 08/06/2010 v 11:56
uživatelem
V jiných jazycích...                            


1 odpovědí

hlasů
0

I když jsem nemohl najít řešení mého problému, to vyřešil sám. Nejsem si jistý, ale myslím, že to byl tento fragment kódu, který dělal to fungovat.

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

To bylo dát dovnitř metody SetupUi () vytvořeného QT4 Designer. Myslím, že buď dbmanip který obsahoval Tableview ztratil informace z proxyModel, nebo (více pravděpodobné), možná jsem odkazoval špatný tabulku mezi proxyModel a původní model (který vytvořil proxyModel), a pak nemohla zobrazit z důvodu to bylo volání buněčnou strukturu z jedné tabulky a aktuální informace od druhého.

Jsou to všechno dohady ačkoli. Přesto, problém je vyřešen.

Odpovězeno 10/06/2010 v 12:15
zdroj uživatelem

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