如何为QTreeWidget项设置标志?逻辑判断失效问题求助
QTreeWidget项编辑权限与文本颜色设置的问题修复
嘿,你的问题根源很明显——逻辑运算符用错啦!
你原本想实现的是:"第二列内容是0或者空的时候,项不可编辑",反过来就是"只有内容既不是0也不是空时,才允许编辑"。但你写成了or,这就导致这个判断条件永远为真:
- 如果内容是
'0',那么item.text(1) != ''是True,整个or表达式结果为True,会错误地加上编辑权限; - 如果内容是空字符串,
item.text(1) != '0'是True,同样or结果为True,也会加上编辑权限; - 只有当内容同时是
'0'和空字符串时才会不满足,但这根本不可能发生。
所以你需要把or换成and,或者用更简洁的not in写法来判断。下面是修正后的完整代码:
def qtree_check_item(self, item, column): # 默认设置为仅启用,不可编辑 item.setFlags(QtCore.Qt.ItemIsEnabled) if column == 1: # 先去除文本前后空白,避免空格被误判为非空内容 text = item.text(1).strip() # 仅当内容既不是0也不是空时,允许编辑 if text != '0' and text != '': item.setFlags(item.flags() | QtCore.Qt.ItemIsEditable) # 非数字内容设置为红色文本 if not text.isnumeric(): item.setForeground(1, QtGui.QBrush(QtGui.QColor("red")))
如果你觉得判断条件有点啰嗦,也可以换成更简洁的写法,效果完全一样:
if text not in ('0', ''): item.setFlags(item.flags() | QtCore.Qt.ItemIsEditable)
这样就能完美实现你想要的效果了:第二列是0或空时不可编辑,非数字内容显示红色文本。
内容的提问来源于stack exchange,提问作者Joseph
相关产品推荐
相关产品推荐

