如何为 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:
总会过去的。
(对不起,如果这一切看起来有点令人费解。)
我有一个 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:
总会过去的。
(对不起,如果这一切看起来有点令人费解。)