繁体   English   中英

获取PyQt5中QTabWidget的背景颜色

[英]Get background color of QTabWidget in PyQt5

创建 PyQt5 选项卡小部件时,背景颜色比普通小部件的背景更白。 我正在寻找一种方法来获取选项卡的确切背景颜色。

与这个问题相关的一些很好的例子是:

获取小部件的背景颜色 - 真的

如何使背景颜色与表单背景相同?

获取背景颜色的最常见建议是使用:

widget.palette().color(QtGui.QPalette.Background)
# alternatively with QtGui.QPalette.Base

没有一个得到确切的颜色。 第一个太黑,后来太白。

这是否有效还取决于您使用的样式和系统。 就我而言,它是在 Linux Mint 设置上,但该应用程序也适用于 windows。

===== 用这个来设置一个matplotlib图的背景=====

这个问题的用例是保持 matplotlib 图形的面颜色与其嵌入的小部件一致。

这是我的例子:

import sys
from PyQt5 import QtCore, QtGui, QtWidgets

from matplotlib.backends.backend_qt5agg import FigureCanvasQTAgg as FigureCanvas
import matplotlib.pyplot as plt
import matplotlib as mpl


class Window(QtWidgets.QMainWindow):
    """ Class to use the data pattern widget in a separate window"""
    def __init__(self, *args, **kwargs):
        super(Window, self).__init__(*args, **kwargs)

        # ===== Setup the window =====
        self.setWindowTitle("background")
        self.resize(600, 400)

        self.maintabs = QtWidgets.QTabWidget(self)
        self.setCentralWidget(self.maintabs)

        self.page = QtWidgets.QWidget(self)
        self.mpl_layout = QtWidgets.QHBoxLayout(self.page)
        self.maintabs.addTab(self.page, 'Demo tab')

        # ===== Set up matplotlib canvas =====
        self.mpl_canvas = None
        # get background color from widget and convert it to RBG
        pyqt_bkg = self.maintabs.palette().color(QtGui.QPalette.Background).getRgbF()
        mpl_bkg = mpl.colors.rgb2hex(pyqt_bkg)

        self.pltfig = mpl.figure.Figure()
        self.pltfig.set_facecolor(mpl_bkg)  # uses the background of mainwindow and not tab
        self.plot_ax = self.pltfig.add_subplot(111)
        self.addmpl(self.pltfig)

    def addmpl(self, fig):
        self.mpl_canvas = FigureCanvas(fig)
        self.mpl_layout.addWidget(self.mpl_canvas)
        self.mpl_canvas.draw()


if __name__ == '__main__':
    app = QtWidgets.QApplication(sys.argv)
    w = Window()
    w.show()
    sys.exit(app.exec())

导致,

结果 gui

调色板的 colors 只是样式如何实际绘制小部件的参考 一些小部件使用渐变来显示它们的内容(考虑按钮,通常“发光”为调色板按钮角色指定的颜色)。 一些 styles 甚至使用看起来与该类型小部件无关的角色来绘制一些小部件。

QTabWidget 的行为方式类似(取决于样式),因此即使您获得了它的背景,它也可能会涂上稍微不同的颜色。

一种可能的解决方案是使用样式表设置小部件的背景,同时仍保留调色板参考:

    self.maintabs.setStyleSheet('background: palette(window);')

请注意,这将使maintabs所有子小部件都使用该纯背景颜色。

您可以使用样式表来设置背景颜色,如下所示:

self.maintabs.setStyleSheet("background-color: rgb(0,0,59)")

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM