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

时间:2018-01-18 10:49:14

标签: python qt pyqt4 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) != '':

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

1 个答案:

答案 0 :(得分:1)

  

我想设置一个标志,以便第二列中的项目是   无论是零还是空,都无法编辑。

然后你......

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:

总是会过去。

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