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 (интермедиат, QModelIndex): аргумент 2 имеет неожиданный тип 'QSqlTableModel'

Это не имеет значения, какие аргументы или использую ли я filterAcceptsRow ро filterAcceptsColumn, он отображает таблицу. Значит ли это сужать проблему некоторые?

Спасибо за ваше время на поиск этой ошибки кодирования / ошибка, и счастливой охоты!

Задан 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