PyQt5 QTableWidget禁用后如何重新启用单元格?

2024-10-01 17:26:39 发布

您现在位置:Python中文网/ 问答频道 /正文

我这辈子都搞不懂这个。我设置了一个表,在第0行第0列我有一个复选框。如果未单击该复选框,我想禁用第1行第0列。否则,如果单击,则启用第1行第0列

要禁用它,我一直在使用标志:

if not self.example_table.cellWidget(0,0).isChecked():
    flags = QtCore.Qt.ItemFlags()
    flags != QtCore.Qt.ItemIsEnabled
    # flags != QtCore.Qt.ItemIsEditable (This also works to disable it)
    self.example_table.item(1,0).setFlags(flags)

问题是,当我尝试用反方向生成else时,它不会重新启用单元格。这是我试过的

else:
    flags = QtCore.Qt.ItemFlags()
    flags == QtCore.Qt.ItemIsEnabled #(still doesnt work)
    # flags = QtCore.Qt.ItemIsEnabled (didnt work)
    # flags == QtCore.Qt.ItemIsEditable (didnt work)
    # flags = QtCore.Qt.ItemIsEditable (didnt work)

    self.tblActivityInfo.item(1, 0).setFlags(flags)

无论我如何尝试,1,0处的单元格仍处于禁用状态

self.example_表只是一个qtwidts.QTableWidget(self.centralwidget)


Tags: selfexampletableitemqtelse复选框work
1条回答
网友
1楼 · 发布于 2024-10-01 17:26:39

你所做的没有多大意义:第二行都只是比较,它们什么都不做

您应该获取现有项的当前标志,然后使用二进制运算符更新它们

item = self.example_table.item(1, 0)
flags = item.flags()
if not self.example_table.cellWidget(0,0).isChecked():
    # set the ItemIsEnabled flag bit to 0
    flags &= ~QtCore.Qt.ItemIsEditable
else:
    # set the ItemIsEnabled flag bit to 1
    flags |= QtCore.Qt.ItemIsEditable
    flags |= QtCore.Qt.ItemIsEnabled

item.setFlags(flags)

我建议您更好地研究比较运算符的作用以及二进制位运算的工作原理

相关问题 更多 >

    热门问题