代码之家  ›  专栏  ›  技术社区  ›  Joseph

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

  •  0
  • Joseph  · 技术社区  · 7 年前

    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 回复  |  直到 7 年前
        1
  •  2
  •   G.M.    7 年前

    我想设置一个标志,以便如果第二列中的项目 零或空,不能编辑。

    然后你有。。。

    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:
    

    这将永远过去。

    (抱歉,如果这一切看起来有点复杂。)