如果在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定义为:
^{pr2}$编辑:起初我的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_())
您必须先设置模型。所以你可以这样做:
您可以设置以下模型之一:
{ NoSelection, SingleSelection, MultiSelection, ExtendedSelection, ContiguousSelection }
希望能帮上忙
出现此错误的原因是,在尝试访问选择模型之前,没有在表上设置模型。解决此问题的最佳方法是将模型设置代码移出
on_open_file
,然后移到setupUi
。然后,on_open_file
只需在重新加载数据之前清除模型。在下面是你的例子的重述。请注意,为了让它正常工作,我不得不修改很多其他的东西(主要是中心小部件和布局)。在
相关问题 更多 >
编程相关推荐