gpt4 book ai didi

python - QTableView 选择更改时出错

转载 作者:行者123 更新时间:2023-12-01 03:42:13 24 4
gpt4 key购买 nike

如果我尝试在 TableView 更改时获取信号,Python 会引发此错误:

Traceback (most recent call last):
File "UIreadresultwindow.py", line 361, in <module>
ui.setupUi(ReadResultWindow)
File "UIreadresultwindow.py", line 113, in setupUi
self.tableEntity.selectionModel().selectionChanged.connect(self.change
_display_result)
AttributeError: 'NoneType' object has no attribute 'selectionChanged'

我将 tableEntity 定义为:

self.tableEntity = QtWidgets.QTableView(self.centralWidget)

编辑:起初我的 QTableView 是空的。我必须打开一个文件来填充它。

Edit2:更具体地说,我有这样的东西:

from PyQt5 import QtCore, QtGui, QtWidgets
class Ui_ReadResultWindow(object):
def setupUi(self, ReadResultWindow):
ReadResultWindow.setObjectName("ReadResultWindow")
ReadResultWindow.resize(661, 438)
self.centralWidget = QtWidgets.QWidget(ReadResultWindow)
self.centralWidget.setObjectName("centralWidget")
self.tableEntity = QtWidgets.QTableView(self.centralWidget)
self.tableEntity.setObjectName("tableEntity")
self.Open = QtWidgets.QPushButton(self.centralWidget)
self.Open.setObjectName("Open")

self.Open.clicked.connect(self.on_open_file)
self.tableEntity.selectionModel().selectionChanged.connect(self.change_display_result)


def on_open_file(self):
x=[1,2,3,4]
self.model= QtGui.QStandardItemModel()
for item in x:
self.model.invisibleRootItem().appendRow(
QtGui.QStandardItem(str(x)))

self.proxy= QtCore.QSortFilterProxyModel()
self.proxy.setSourceModel(self.model)
self.tableEntity.setModel(self.proxy)
self.tableEntity.resizeColumnsToContents()

def change_display_result(self,selected,deselected):
index_entity = self.tableEntity.selectionModel().selectedIndexes()
temp_entity = self.tableEntity.selectionModel().model()
for index in sorted(index_entity):
print(str(temp_entity.data(index)))

if __name__ == "__main__":
import sys
app = QtWidgets.QApplication(sys.argv)
ReadResultWindow = QtWidgets.QMainWindow()
ui = Ui_ReadResultWindow()
ui.setupUi(ReadResultWindow)
ReadResultWindow.show()
sys.exit(app.exec_())

最佳答案

您收到该错误的原因是您在尝试访问选择模型之前没有在表上设置模型。解决此问题的最佳方法是将模型设置代码从 on_open_file 移出并移至 setupUi 中。然后,on_open_file 只需要在重新加载数据之前清除模型即可。

下面是您的示例的重写。请注意,我必须修复很多其他问题才能使其正常工作(主要是中央小部件和布局)。

import sys, random
from PyQt5 import QtCore, QtGui, QtWidgets

class Ui_ReadResultWindow(object):
def setupUi(self, ReadResultWindow):
ReadResultWindow.resize(661, 438)

self.tableEntity = QtWidgets.QTableView()

self.model = QtGui.QStandardItemModel()
self.proxy = QtCore.QSortFilterProxyModel()
self.proxy.setSourceModel(self.model)
self.tableEntity.setModel(self.proxy)
self.tableEntity.selectionModel().selectionChanged.connect(
self.change_display_result)

self.Open = QtWidgets.QPushButton('Test')
self.Open.clicked.connect(self.on_open_file)

widget = QtWidgets.QWidget(ReadResultWindow)
layout = QtWidgets.QVBoxLayout(widget)
layout.addWidget(self.tableEntity)
layout.addWidget(self.Open)

ReadResultWindow.setCentralWidget(widget)

def on_open_file(self):
self.model.setRowCount(0)
x = random.sample(range(10, 100), 10)
for item in x:
self.model.invisibleRootItem().appendRow(
QtGui.QStandardItem(str(item)))
self.tableEntity.resizeColumnsToContents()

def change_display_result(self,selected,deselected):
index_entity = self.tableEntity.selectionModel().selectedIndexes()
temp_entity = self.tableEntity.selectionModel().model()
for index in sorted(index_entity):
print(str(temp_entity.data(index)))

if __name__ == "__main__":

app = QtWidgets.QApplication(sys.argv)
ReadResultWindow = QtWidgets.QMainWindow()
ui = Ui_ReadResultWindow()
ui.setupUi(ReadResultWindow)
ReadResultWindow.show()
sys.exit(app.exec_())

关于python - QTableView 选择更改时出错,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39407717/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com