【问题标题】:How to color a PyQt QTabwidget如何为 PyQt QTabwidget 着色
【发布时间】:2013-11-17 06:11:14
【问题描述】:

我有一个包含 QTabWidget 的 PyQt 主窗口。选项卡小部件包含一些按钮和文本框。

我想为整个标签背景着色,而不仅仅是标签栏区域中的标签。

我没有使用样式表,我更喜欢使用调色板,因为我已经在使用调色板,但如果样式表是唯一的选择,那没关系。

我试过了:

p = self.tabWidget.palette()
p.setColor(self.tabWidget.backgroundRole(), Qt.red)
self.tabWidget.setPalette(p)

这会产生一个红色的标签栏区域,但主背景仍然是白色的。

关闭自动填充,使用 self.tabWidget.setAutoFillBackground(False) 略有不同,各个选项卡现在颜色很好,但主体仍然是白色。

尝试一个小样式表:

self.tabWidget.setStyleSheet("QWidget {background-color: yellow }")

这会为选项卡的主体着色,但它也会将其他所有内容着色为黄色,包括按钮和文本框。此外,所有突出的小标签都是黄色的。自动填充没有任何影响。

关于如何为标签的主体着色但不清除其他小部件的任何想法?

我使用的是 PyQt 4.10 版和 Python 2.7。

【问题讨论】:

    标签: python pyqt qtstylesheets qtabwidget qpalette


    【解决方案1】:

    使用 StyleSheet,您可以执行以下操作:

    stylesheet = """ 
        QTabBar::tab:selected {background: gray;}
        QTabWidget>QWidget>QWidget{background: gray;}
        """
    
    self.setStyleSheet(stylesheet)
    

    V 形允许引用小部件的子级。它告诉 Qt 将样式表应用于应用程序中任何 QTabWidget 的孙子元素(参见Qt StlyleSheet syntax)。选项卡“body”是 QTabWidget 的子代。

    它的渲染效果不是很好,您必须调整一些设置。请参阅Customizing QTabWidget and QTabBar 上的 Qt 文档。

    【讨论】:

    • 这很好用。我必须在拐角处添加半径并更改文本颜色,但总的来说,我做了我想要的。谢谢。
    • 有没有办法让tab背景的body透明?
    【解决方案2】:

    如果你只是想给tab body的背景上色,那么设置它的顶级内容widget的背景角色:

        widget = QtGui.QWidget(tabwidget)
        widget.setAutoFillBackground(True)
        palette = widget.palette()
        palette.setColor(widget.backgroundRole(), QtCore.Qt.red)
        widget.setPalette(palette)
        # add layout and child widgets
        ...
        self.addTab(widget, label)
    

    之前出现过similar question to this,似乎在为标签着色时,样式表可能是唯一适用于所有平台的解决方案。不过,这完全取决于您要达到的目标。

    我的answer to that question 重新实现了标签栏的绘制事件,并且运行良好 - 但仅适用于 Linux。

    【讨论】:

      猜你喜欢
      • 2012-02-28
      • 1970-01-01
      • 1970-01-01
      • 2020-06-10
      • 2018-05-30
      • 1970-01-01
      • 1970-01-01
      • 2012-03-15
      • 1970-01-01
      相关资源
      最近更新 更多