pyqt中QTableWidget的勾选框,怎么获取他的勾选状态
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了pyqt中QTableWidget的勾选框,怎么获取他的勾选状态相关的知识,希望对你有一定的参考价值。
参考技术A tableWidget_itemClicked(QTableWidgetItem *item)这里的item就是单击的项
还有获取当前项: ui->tableWidget->currentItem();
PyQt5 QTableWidget 禁用后如何重新启用单元格? [复制]
【中文标题】PyQt5 QTableWidget 禁用后如何重新启用单元格? [复制]【英文标题】:PyQt5 QTableWidget How to re-enable a cell after disabling? [duplicate] 【发布时间】:2020-06-02 19:14:19 【问题描述】:对于我的生活,我无法弄清楚这一点。我有一个表格,在第 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_table 只是一个 QtWidgets.QTableWidget(self.centralwidget)
【问题讨论】:
【参考方案1】:您所做的没有多大意义:第二行 flags
都只是比较,它们绝对什么都不做。
您应该获取现有项目的当前标志,然后使用二元运算符更新它们。
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)
我建议您更好地研究比较运算符的作用以及二进制位运算的工作原理。
【讨论】:
因此,无论出于何种原因,这都可以重新启用单元格,但是我无法更改那里的值。我将“ItemIsEnabled”更改为“ItemIsEditable”。但是,这并没有重新启用单元格,所以我在之后添加了 'flags |= QtCore.Qt.ItemIsEnabled'。这行得通,谢谢! 是的,我也不知道为什么要进行比较,但这就是我在许多不同的谷歌搜索中找到的代码片段。我也不明白为什么比较会改变标志的影响,但他们确实做到了。 不,他们没有。它在第一种情况下“起作用”(禁用项目),因为您创建了一个“空”标志(如 0 值),它不启用任何标志(显然包括 ItemIsEnabled)。 这更有意义。我觉得有人曾经用这个回答过这个问题,并且它被多次复制到不同的响应中,导致它“有效”地禁用它。 这很可能,不幸的是,在没有真正理解它的作用的情况下使用代码(尤其是在 SO 上)是很常见的。无论如何,我已经看到了您的编辑建议,但我不明白:ItemIsEnabled
和 ItemIsEditable
是两个截然不同的标志,它们的存在是有特定原因的。您要(禁用|启用)该项目还是使其[不可]可编辑?以上是关于pyqt中QTableWidget的勾选框,怎么获取他的勾选状态的主要内容,如果未能解决你的问题,请参考以下文章
pyqt中QTableWidget的勾选框,怎么获取他的勾选状态
WPF checkbox 怎么判断鼠标是在 checkbox的勾选框范围内,还是在checkbox勾选框右边的文字范围内?
如何从 QComboBox 中获取所选项目以显示在 PyQt5 的 QTableWidget 中? (QComboBox 有复选框来选择项目)
PySide/PyQt4:向 QTableWidget Horizontal (column) Header 添加一个复选框