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



如何删除QTreeWidgetItem的背景色或将其重置为默认值?

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

正确的方法是清除底层数据,如下所示:

treeWidgetItem.setData(0, QtCore.Qt.BackgroundRole, None)
<小时 />

值得注意的是,当尚未设置背景时,background()方法实际上将返回 null QBrush而不是 None 。这是因为底层Qt代码是这样做的:

return qvariant_cast<QBrush>(data(column, Qt::BackgroundRole))

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

我不确定是否有任何方法可以用setBackgroundColor做到这一点,但我会使用setStyleSheet

样式表适用于每个QtGui小部件,总体上更易于使用。

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

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

如果你想重置QTreeWidget的样式表,只需输入这个:

    self.TreeWidgetItem.setStyleSheet("")

这会将任何小部件的颜色重置为默认颜色,而不会给出任何例外。

此外,使用qt样式表系统也是一种很好的做法,它很容易并且有很多好处。

你可以用这个来获得背景颜色:

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)

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

由于您更改了背景颜色

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

您也可以在之前读出默认画笔

default_tree_widget_item_brush = treeWidgetItem.background(column)

并在以后要返回默认值时将其设置回此值。


旁注:在Qt 5.6中似乎没有setBackgroundColor QTreeWidgetItems的方法,只有setBackground。因此,解决方案可能略微取决于Qt的使用版本。

我通过将背景颜色设置为透明白色来成功删除背景颜色。

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

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

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

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

最新更新