【问题标题】:PyQt: reset or remove the background color from QTreeWidgetItemPyQt:从 QTreeWidgetItem 重置或删除背景颜色
【发布时间】:2016-10-12 04:11:58
【问题描述】:

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

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

【问题讨论】:

  • 之前是怎么设置的?
  • treeWidgetItem.setBackgroundColor(0, QtGui.QColor('green')) #
  • 你为什么需要奋斗?你只需做treeWidgetItem.setBackgroundColor(0, QtGui.QColor('white'))
  • @ShellRox 如果默认背景颜色不是白色怎么办?
  • @PatrizioBekerle 我在下面提到了另一种方法。

标签: python colors background pyqt qtreewidgetitem


【解决方案1】:

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

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

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

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

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

    self.TreeWidgetItem.setStyleSheet("")

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

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

【讨论】:

    【解决方案2】:

    正确的方法是清除底层数据,像这样:

    treeWidgetItem.setData(0, QtCore.Qt.BackgroundRole, None)
    

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

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

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

    【讨论】:

      【解决方案3】:

      您可以通过以下方式获取背景颜色:

      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)
      

      【讨论】:

        【解决方案4】:

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

        因为你改变了背景颜色

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

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

        default_tree_widget_item_brush = treeWidgetItem.background(column)
        

        稍后当您想要恢复默认值时将其设置回此值。


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

        【讨论】:

          【解决方案5】:

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

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

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

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

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

          【讨论】:

            猜你喜欢
            • 2014-01-07
            • 2011-01-09
            • 1970-01-01
            • 1970-01-01
            • 2012-08-21
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            相关资源
            最近更新 更多