如何为 QTreeWidget 中的项目设置标志?

How to set flag for an item in a QTreeWidget?

我有一个 QTreeWidget,其中包含两列和一些行。我想设置一个标志,以便如果第二列中的项目为零或为空,则无法对其进行编辑。如果单击的项目不是数字,它将以红色文本显示。

我的代码:

def qtree_check_item(self, item, column):
    item.setFlags(QtCore.Qt.ItemIsEnabled)
    if column == 1:
        if item.text(1) != '0':
            item.setFlags(item.flags() | QtCore.Qt.ItemIsEditable)
        if not item.text(1).isnumeric():
            item.setForeground(1, QtGui.QBrush(QtGui.QColor("red")))

如果项目为零,则此方法有效。如果我更换:

if item.text(1) != '0':

if item.text(1) != '':

这适用于空字符串。但是如果我结合使用:

if item.text(1) != '0' or item.text(1) != '':

未设置标志。我做错了什么?

I would like to set a flag so that if an item in the second column is either a zero or empty, it cannot be edited.

然后你有...

if item.text(1) != '0' or item.text(1) != '':
    item.setFlags(item.flags() | QtCore.Qt.ItemIsEditable)

现在考虑如果 item.text(1) == '0' 会发生什么。在这种情况下,第二个测试 item.text(1) != '' 通过,并且由于 or,整个条件通过。同样,如果 item.text(1) == '' 为真,则测试 item.text(1) != '0' 将通过并且整个条件通过。

所以,您只想设置 editable 标志,如果两者...

item.text(1) != '0' and item.text(1) != ''

成立。

换句话说,由于 item.text(1) 不能同时等于 '0''',条件...

if item.text(1) != '0' or item.text(1) != '':

本质上是...

if True or False:

总会过去的。

(对不起,如果这一切看起来有点令人费解。)