PyQt:重置或删除QTreeWidgetItem的背景颜色

4

我该如何移除或重置QTreeWidgetItem的背景颜色?

treeWidgetItem.setBackgroundColor(0, QtGui.QColor('green'))

你之前是怎么设置它的? - Trilarion
treeWidgetItem.setBackgroundColor(0, QtGui.QColor('green')) #<-像这样吗? - moDong
你为什么要苦苦挣扎呢?你只需要执行 treeWidgetItem.setBackgroundColor(0, QtGui.QColor('white')) 即可。 - ShellRox
1
@ShellRox 如果默认的背景颜色不是白色怎么办? - Patrizio Bekerle
@PatrizioBekerle 我在下面提到了另一种方法。 - ShellRox
@ShellRox 至少在 C++ 中,QTreeWidgetItem 没有 setStyleSheet 方法(已在 Qt 5.7 中测试)。 - Patrizio Bekerle
5个回答

5
正确的方法是清除底层数据,就像这样:
treeWidgetItem.setData(0, QtCore.Qt.BackgroundRole, None)

值得注意的是,当背景没有被设置时,background()方法实际上会返回一个空的QBrush而不是None。这是因为底层的Qt代码做了这样的处理:
return qvariant_cast<QBrush>(data(column, Qt::BackgroundRole))

因此,它使用了一个空的QVariant(在PyQt术语中等同于None),并将其转换为一个空的QBrush - 这意味着它不代表默认的系统颜色,并且不能用于重置原始值。


3

我不确定是否有使用setBackgroundColor的方法,但我会使用setStyleSheet

StyleSheet适用于每个QtGui窗口小部件,并且总体上更易于使用。

如果要将QTreeWidget背景颜色设置为绿色:

    self.TreeWidgetItem = QtGui.QTreeWidgetItem()
    self.TreeWidgetItem.setStyleSheet("background-color: green;")

如果您想要重置 QTreeWidget 的样式表,只需输入以下内容:

    self.TreeWidgetItem.setStyleSheet("")

这将重置任何小部件的颜色为默认值,不会产生任何异常。

此外,使用qt样式表系统是一个好的实践,它易于使用并且有很多优点。


1
您可以使用以下代码获取背景颜色:

```

```

treeWidgetItem.background(0)

返回类似以下内容:
<PySide.QtGui.QBrush(QColor(ARGB 1, 0, 0, 0) , NoBrush )   at 0x00000000EB1F6588>

现在,在应用更改之前将其放入字符串中,然后你就得到了答案。
originalBG = treeWidgetItem.background(0)

# New background
treeWidgetItem.setBackgroundColor(0, QtGui.QColor('green'))

# Old background
treeWidgetItem.setBackgroundColor(0, originalBG)

0

默认值可能取决于操作系统和其他因素。

由于您更改了背景颜色,因此

treeWidgetItem.setBackgroundColor(0, QtGui.QColor('green'))

在编程中,你也可以读取默认画笔。

default_tree_widget_item_brush = treeWidgetItem.background(column)

并在需要返回默认值时将其设置回来。


附注:在Qt 5.6中,似乎没有为QTreeWidgetItems提供setBackgroundColor方法,只有setBackground方法。因此,解决方案可能会略有不同,具体取决于所使用的Qt版本。

0

我通过将背景颜色设置为透明白色成功地去除了背景颜色。

treeWidgetItem.setBackgroundColor(0, QtGui.QColor(255, 255, 255, 0))

这也适用于深色桌面主题。

但由于setBackgroundColor方法已被弃用,我现在使用:

treeWidgetItem.setBackground(0, QtGui.QBrush(QtGui.QColor(255, 255, 255, 0)))

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接