Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/298.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python PyQt5 QListView已停止从QSqlTableModel和I don';我不知道为什么_Python_Python 3.x_Sqlite_Pyqt_Pyqt5 - Fatal编程技术网

Python PyQt5 QListView已停止从QSqlTableModel和I don';我不知道为什么

Python PyQt5 QListView已停止从QSqlTableModel和I don';我不知道为什么,python,python-3.x,sqlite,pyqt,pyqt5,Python,Python 3.x,Sqlite,Pyqt,Pyqt5,在帖子底部更新信息。 我需要一些关于PyQt5及其数据库模型视图体系结构的帮助 我正在尝试重新制作一个数据库项目。()更新它以使用模型() 我目前有三个QSqlTableModel,数据库中每个表对应一个: 1) model_media是我的数据库中“media”表的QSqlTableModel,目前有616个条目,主窗口上的QListView和QDataWidgetMapper使用它来显示所选条目的详细信息 2) model_genres“genres”表的另一个QSqlTableModel

在帖子底部更新信息。

我需要一些关于PyQt5及其数据库模型视图体系结构的帮助

我正在尝试重新制作一个数据库项目。()更新它以使用模型()

我目前有三个QSqlTableModel,数据库中每个表对应一个:

1) model_media是我的数据库中“media”表的QSqlTableModel,目前有616个条目,主窗口上的QListView和QDataWidgetMapper使用它来显示所选条目的详细信息

2) model_genres“genres”表的另一个QSqlTableModel

3) 模型类型“媒体类型”表的最终QSqlTableModel

但是,在设置了第二个和第三个模型(在子窗口上显示它们的数据)之后,当向下滚动列表视图时,原始模型已经停止加载条目,我不知道为什么,它会加载一些条目,然后在滚动到QListView的末尾时再加载一些条目

澄清(我希望): 原始模型“model_media”用于在QListView中显示媒体标题列表(目前有616个条目),它将在QListView中显示大约前100个条目,当我向下滚动时,它将加载更多,正如预期的那样。因此,我继续实现接下来的两个模型,并在它们自己的窗口上类似地显示它们的数据,这很好,但是,在这一点上,当向下滚动列表时,主QListView不再加载条目,它只显示前100个左右的条目

原始项目(PyQt5和Sqlite3):

新版本(仅PyQt5):

更新:测试脚本。

我目前认为我实现类/GUI的方式会干扰主模型,并且会将项目剥离到基础,并尝试实现一些测试以找到真正的问题

我将测试脚本包括在下面,希望它们能对其他人有所帮助

根据eyllanesc的建议,我编写了一个我正在使用的模型的最小示例,并在数据库上运行它,试图重现错误,但是,这个测试脚本实际上起到了作用:

从PyQt5导入QtCore
从PyQt5导入QtSql
从PyQt5导入QtWidgets
类DBQueries(QtWidgets.QMainWindow):
def uuu init uuuu(self,db=“Media Database.db”,parent=None):
超级(dbquerys,self)。\uuuuu初始化\uuuuuu(父级)
self.db=QtSql.QSqlDatabase.addDatabase(“QSQLITE”)
self.db.setDatabaseName(db)
如果不是self.db.open():
打印(“连接到数据库时出错:\n{}”。格式(self.db.lastError().text())
#====媒体模型=====
self.model_media=QtSql.QSqlTableModel(self)
self.model_media.setable(“media”)
self.model_media.sort(1,QtCore.Qt.AscendingOrder)
self.model_media.select()
#======类型模型=====
self.model_genres=QtSql.QSqlTableModel(self)
self.model\u类型可设置(“类型”)
self.model_genres.setSort(1,QtCore.Qt.AscendingOrder)
self.model_genres.select()文件
#======类型模型=====
self.model_types=QtSql.QSqlTableModel(self)
self.model\u types.setable(“媒体类型”)
self.model_types.setSort(1,QtCore.Qt.AscendingOrder)
self.model_types.select()
#====代理/搜索模型=====
self.proxy=QtCore.QSortFilterProxyModel(self)
self.proxy.setSourceModel(self.model_媒体)
self.proxy.setFilterKeyColumn(1)
self.proxy.setFilterCaseSensitivity(QtCore.Qt.case不区分大小写)
#====UI=====
self.cw=qtwidts.QWidget(self)
self.vl=qtwidts.QVBoxLayout(self.cw)
self.le_search=qtwidts.QLineEdit()
self.le_search.textChanged.connect(
lambda:self.proxy.setFilterFixedString(
self.le_search.text())
self.vl.addWidget(self.leu搜索)
self.view\u media\u list=qtwidts.QListView()
self.view\u media\u list.setModel(self.proxy)
self.view_media_list.setModelColumn(1)#Title column。
self.vl.addWidget(self.view\u media\u列表)
self.view_media=qtwidts.QTableView()
self.view\u media.setModel(self.proxy)
self.view\u media.sortByColumn(1,QtCore.Qt.AscendingOrder)
self.vl.addWidget(self.view\u媒体)
self.cb_genres=qtwidts.QComboBox()
self.cb_genres.setModel(self.model_genres)
self.cb_genres.setModelColumn(1)
self.vl.addWidget(self.cb_类型)
self.view_genres=qtwidts.QTableView()
self.view\u genres.setModel(self.model\u genres)
self.vl.addWidget(self.view\u类型)
self.cb_types=qtwidts.QComboBox()
self.cb_types.setModel(self.model_types)
self.cb_types.setModelColumn(1)
self.vl.addWidget(self.cb_类型)
self.view_types=QtWidgets.QTableView()
self.view\u types.setModel(self.model\u types)
self.vl.addWidget(self.view\u类型)
#======已选定=====
self.selected\u media=self.view\u media.selectionModel()
self.selected\u media.selectionChanged.connect(self.display\u详细信息)
self.setCentralWidget(self.cw)
def显示详细信息(自身):
“”“显示包含表格单元格内容的对话框,这只是一个PoC。”“”
details=qtwidts.QDialog(self)
详细信息。设置最小宽度(250)
lbl=qtwidts.QLabel(详细信息)
lbl.setText(str(self.selected_media.currentIndex().data())
详情.show()
如果名称=“\uuuuu main\uuuuuuuu”:
导入系统
app=qtwidts.QApplication(sys.argv)
#添加了一个输入,使t更易于交换
#在项目和测试数据库之间。
db=输入(“输入数据库名称>>”)
window=dbquerys(db)
window.show()
sys.exit(app.exec_())
意识到愿意帮忙的人不会拥有我在项目中使用的数据库