[英]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())
导致,
调色板的 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.