PyQt4: βάση δεδομένων μου εμφανίζει κενά κελιά

ψήφοι
48

Είμαι χρησιμοποιώντας το πλαίσιο PyQt4 να κάνουμε κάποιες ενδείξεις για φόρμες βάσεων δεδομένων. Δυστυχώς, έχω χτυπήσει μια εμπλοκή, ενώ προσπαθεί να φιλτράρει και να εμφανίσει τη βάση δεδομένων μου από το επώνυμο. Ας υποθέσουμε ότι η σύνδεση της βάσης δεδομένων λειτουργεί. Επίσης, ας υποθέσουμε ότι έχω τη σωστή ποσότητα των προϊόντων σε tupleHeader μου από τότε που χρησιμοποιούν την ίδια μέθοδο initializeModel για άλλες μεθόδους (όπως η λειτουργία αναζήτησης () που περιγράφονται παρακάτω, και δουλεύει μια χαρά.

Καλώ τη λειτουργία της οθόνης () και λειτουργεί απολύτως εντάξει, αλλά κατά τη δημιουργία ενός proxyModel από την sourceModel, και προσπαθώντας να εμφανιστεί το 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)

EDIT: Δεν ενδιαφέρομαι για τη διατήρηση αυτό το κομμάτι του κώδικα, θέλω απλώς να ξέρω γιατί επιτρέπει το τραπέζι για να δείξει το περιεχόμενο του πίνακα αντί για μια δέσμη των κενών κυττάρων

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

Επίσης, αν έχετε θέσει σε αυτό μετά την τελευταία δήλωση (self.view.setModel (proxyModel)), θα εμφανιστεί το τραπέζι, ακόμη και αν δεν στείλετε ένα σφάλμα:

self.proxyModel.filterAcceptsRow εκτύπωσης (2, self.sourceModel) TypeError: QSortFilterProxyModel.filterAcceptsRow (int, QModelIndex): επιχείρημα 2 έχει απροσδόκητη τύπου 'QSqlTableModel'

Δεν έχει σημασία ποια είναι τα επιχειρήματα είναι ή αν μπορώ να χρησιμοποιήσω filterAcceptsRow ro filterAcceptsColumn, εμφανίζει τον πίνακα. Μήπως αυτό περιορίσετε το πρόβλημα λίγο;

Σας ευχαριστώ για το χρόνο σας ψάχνοντας για αυτό το σφάλμα κωδικοποίησης / bug, και ευτυχισμένη κυνήγι!

Δημοσιεύθηκε 08/06/2010 στις 11:56
χρήστη
Σε άλλες γλώσσες...                            


1 απαντήσεις

ψήφοι
0

Αν και δεν μπορούσε να βρει τη λύση στο πρόβλημά μου, η ίδια λυθεί. Δεν είμαι σίγουρος, αλλά νομίζω ότι ήταν αυτό το απόσπασμα κώδικα που κάνει την εργασία.

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

Αυτό τέθηκε στο εσωτερικό της μεθόδου setupUi () δημιουργήθηκε από τον σχεδιαστή Qt4. Νομίζω ότι ούτε η 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