PyQt4: Ma base de données affiche les cellules vides

voix
48

J'utilise le cadre de pyqt4 pour faire des écrans pour les formulaires de base de données. Malheureusement, je frappe un accroc en essayant de filtrer et d'afficher ma base de données par nom. On suppose que la connexion de base de données fonctionne. Supposons également que j'ai la bonne quantité d'articles dans mon tupleHeader depuis que j'utilise la même méthode initializeModel pour d'autres méthodes (comme la fonction recherche () décrite ci-dessous, et il fonctionne très bien.

J'appeler la fonction d'affichage () et il fonctionne parfaitement bien, mais lors de la création d'un proxyModel du sourceModel, et en essayant d'afficher le proxyModel avec ma fonction de recherche, je les cellules vides affichées. Quand je limiterai ma recherche afin qu'il filtre la moitié de ma base de données, il montre que de nombreuses cellules (donc la plupart de ce travaille). Mais il n'affichera rien de la base de données elle-même.

Ci-dessous est une partie de mon code:

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: Je ne suis pas intéressé à garder ce morceau de code, je veux juste savoir pourquoi il permet à la table de montrer le contenu de la table au lieu d'un groupe de cellules vides

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

En outre, si vous mettez dans ce après la dernière instruction (self.view.setModel (proxyModel)), il affichera la table, même si elle n'envoie une erreur:

impression self.proxyModel.filterAcceptsRow (2, self.sourceModel) TypeError: QSortFilterProxyModel.filterAcceptsRow (int, QModelIndex): Argument 2 a le type inattendu 'QSqlTableModel'

Peu importe ce que les arguments sont ou si j'utilise filterAcceptsRow ro filterAcceptsColumn, il affiche la table. Est-ce que l'incident en quelques-uns?

Nous vous remercions de votre temps à la recherche de cette erreur / bug de codage, et bonne chasse!

Créé 08/06/2010 à 11:56
utilisateur
Dans d'autres langues...                            


1 réponses

voix
0

Bien que je ne pouvais pas trouver la solution à mon problème, il se résolu. Je ne suis pas certain, mais je pense qu'il était cet extrait de code qui fait fonctionner.

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

Cela a été mis à l'intérieur de la méthode setupUi () créé par le concepteur Qt4. Je pense que ce soit le dbmanip qui contenait le TableView perdu les informations du proxyModel, ou (plus probablement), je l'ai mentionné la mauvaise table entre le proxyModel et le modèle original (qui a créé le proxyModel), puis ne pouvait pas afficher parce que il appelait la structure cellulaire d'une table et l'information réelle d'une autre.

Ce sont toutes les suppositions bien. Pourtant, le problème est résolu.

Créé 10/06/2010 à 12:15
source utilisateur

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