PyQt4: Moja baza wyświetla puste komórki

głosy
48

Używam ramy PyQt4 zrobić kilka wyświetlacze formach baz danych. Niestety, uderzył w przeszkodę podczas próby filtrować i wyświetlać mojej bazy danych według nazwiska. Zakładamy, że połączenie z bazą danych działa. Zakładamy również, że mam odpowiednią ilość elementów w moim tupleHeader ponieważ używam tej samej metody initializeModel dla innych metod (jak funkcja wyszukiwania (opisane poniżej), i to działa dobrze.

I wywołania funkcji display () i działa perfekcyjnie, ale podczas tworzenia proxyModel z sourceModel i próbuje wyświetlić proxyModel z mojej funkcji wyszukiwania, mam puste komórki wyświetlane. Kiedy ograniczyć wyszukiwanie tak, że filtruje pół mojej bazy danych, to pokazuje, że wiele komórek (tak większość to działa). Ale to nie będzie nic z samej bazy danych wyświetlane.

Poniżej niektóre z moich kodu:

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: Nie jestem zainteresowany w utrzymaniu ten kawałek kodu, po prostu chcę wiedzieć, dlaczego pozwala tabelę, aby zobaczyć zawartość tabeli zamiast pęczek pustych komórek

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

Ponadto, jeśli włożysz w to po ostatnim oświadczeniu (self.view.setModel (proxyModel)), to pokaże tabelę, nawet jeśli to będzie wysyłać błąd:

self.proxyModel.filterAcceptsRow print (2, self.sourceModel) TypeError: QSortFilterProxyModel.filterAcceptsRow (int, QModelIndex): Argument 2 ma nieoczekiwany typ 'QSqlTableModel'

To nie ma znaczenia, jakie są argumenty, czy używam filterAcceptsRow ro filterAcceptsColumn, wyświetla tabelę. Czy to zawężenie jakiś problem?

Dziękuję za poświęcony czas szukasz tego kodowania błędu / błędów i szczęśliwego polowania!

Utwórz 08/06/2010 o 11:56
użytkownik
W innych językach...                            


1 odpowiedzi

głosy
0

Chociaż nie mogę znaleźć rozwiązania mojego problemu, to rozwiązał się sam. Nie jestem pewien, ale myślę, że był to fragment kodu, który sprawiał, że działa.

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

To było umieścić wewnątrz metody SetupUi () utworzony przez projektanta Qt4. Myślę, że albo dbmanip zawierał Tableview utracone informacje z proxyModel lub (bardziej prawdopodobne), mogą odwoływać mam złą tabeli pomiędzy proxyModel i oryginalnego modelu (który stworzył proxyModel), a następnie wyświetlić ponieważ nie mógł było wywołanie strukturę komórkową z jednej tabeli i aktualne informacje od drugiego.

To wszystko są domysły chociaż. Mimo to, problem rozwiązany.

Odpowiedział 10/06/2010 o 12:15
źródło użytkownik

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