Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/python-3.x/15.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 更改QTableWidget单个单元格的可编辑性_Python_Python 3.x_Pyqt_Pyqt5 - Fatal编程技术网

Python 更改QTableWidget单个单元格的可编辑性

Python 更改QTableWidget单个单元格的可编辑性,python,python-3.x,pyqt,pyqt5,Python,Python 3.x,Pyqt,Pyqt5,我使用QTableWidget作为用户的I/O功能,但我希望通过禁用仅用于数据输出的单元格的可编辑性,使其更加用户友好和直观 我可以在Qt Designer中的每个单元格的标志下取消选中“可编辑”,但只要我使用self.table\u item.setItem(行、列、QTableWidgetItem(str(value)))更改单元格的值,单元格就可以再次编辑 建议使用self.table\u item.setEditTriggers(qtwidts.QTableWidget.NoEditTr

我使用QTableWidget作为用户的I/O功能,但我希望通过禁用仅用于数据输出的单元格的可编辑性,使其更加用户友好和直观

我可以在Qt Designer中的每个单元格的标志下取消选中“可编辑”,但只要我使用
self.table\u item.setItem(行、列、QTableWidgetItem(str(value)))更改单元格的值,
单元格就可以再次编辑

建议使用
self.table\u item.setEditTriggers(qtwidts.QTableWidget.NoEditTriggers)
,但这会更改整个QTableWidget项的标志,而不仅仅是一个单元格

我还尝试了
self.table\u time.item(行、列).setEditTriggers(qtwidts.QTableWidget.NoEditTriggers)
,但我得到了回溯
“QTableWidgetItem”对象没有属性“setEditTriggers”

.setFlags()
似乎是我确实需要使用的函数,但我不知道如何使用此函数使某些内容不可编辑,或者如何将其应用于单个单元格


问题: 通过
.setItem()
更改单元格QTableWidgetItem的值后,如何更改PyQt5中QTableWidget单个单元格的“可编辑”标志



如果您提供额外的解决方案,以优雅的方式使整行不可编辑,您将获得额外的虚拟internet点。

您必须禁用标志
Qt::ItemIsEditable

从PyQt5导入QtCore、QtWidgets
类MainWindow(QtWidgets.QMainWindow):
def uuu init uuu(self,parent=None):
超级(主窗口,自我)。\uuuuu初始化\uuuuuuu(父级)
table_widget=qtwidts.QTableWidget(4,3)
self.setCentralWidget(表_小部件)
it=QtWidgets.QTableWidgetItem(“不可编辑”)
it.setFlags(it.flags()&~QtCore.Qt.ItemIsEditable)
表_widget.setItem(1,1,it)
如果名称=“\uuuuu main\uuuuuuuu”:
导入系统
app=qtwidts.QApplication(sys.argv)
w=主窗口()
w、 调整大小(320240)
w、 show()
sys.exit(app.exec_())
如果要优雅地禁用行或列,可以使用createEditor方法返回None的委托:

从PyQt5导入QtCore、QtWidgets
类ReadOnlyDelegate(QtWidgets.QStyledItemDelegate):
def createEditor(自身、父项、选项、索引):
返回
类MainWindow(QtWidgets.QMainWindow):
def uuu init uuu(self,parent=None):
超级(主窗口,自我)。\uuuuu初始化\uuuuuuu(父级)
table_widget=qtwidts.QTableWidget(4,3)
self.setCentralWidget(表_小部件)
delegate=ReadOnlyDelegate(表\小部件)
表_widget.setItemDelegateForRow(1,委托)
#表_widget.setItemDelegateForColumn(1,委托)
如果名称=“\uuuuu main\uuuuuuuu”:
导入系统
app=qtwidts.QApplication(sys.argv)
w=主窗口()
w、 调整大小(320240)
w、 show()
sys.exit(app.exec_())

非常感谢!此解决方案工作完美,易于实现,并且您的示例代码也可以理解。