如何删除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)))