繁体   English   中英

如何为Matplotlib小部件(navBar / canvas)设置PyQT4样式表?

[英]How to set PyQT4 Stylesheet for Matplotlib widget (navBar/canvas)?

我有一个QMainWindow应用程序,包括菜单栏,中央窗口小部件中的拆分器和状态栏。 在拆分器的左侧是包含一些控件(列表,组合和按钮)的小部件,右侧是包含Matplotlib画布和NavigationToolBar布局的小部件。

我能够使用QT样式表来设置所有内容的各种背景颜色......除了Matplotlib方面。 我试图使用以下但它没有效果。 我也试过直接设置NavBar和Canvas样式表......但是它再次没有用:

self.mplFig.setStyleSheet(".QWidget {background-color:   #0ff}")

基本上我试图转动NavToolbar的背景颜色和画布周围的边框以匹配其他所有(目前青色,所以它显示容易)...任何帮助将不胜感激。 完整代码和示例图片如下:

import sys
from PyQt4 import QtGui, QtCore
import matplotlib
matplotlib.use("qt4agg")
from matplotlib.backends.backend_qt4agg import FigureCanvasQTAgg as FigureCanvas
from matplotlib.backends.backend_qt4agg import NavigationToolbar2QT as NavigationToolbar
from matplotlib.figure import Figure

class testGUI(QtGui.QMainWindow):
    def __init__(self, parent=None):
        super(testGUI, self).__init__(parent)
        self.buildLayout()
        self.buildMenus()        
        self.menuBar()
        self.statusBar()

        ## Style Sheets
        self.splitter.setStyleSheet("QSplitter::handle:horizontal {background-color:   #ccc}")            
        self.controlWidget.setStyleSheet(".QWidget {background-color:   #0ff}")  
        menuStyle = """.QMenuBar {background-color:   #0ff}
            QMenuBar::item {background: transparent} 
            QMenuBar::item:selected {background: #8ff}"""
        self.statusBar().setStyleSheet(".QStatusBar {background-color:   #0ff}")
        self.menuBar().setStyleSheet(menuStyle)
        # .....THIS DOESN"T WORK !! .....
        self.mplFig.setStyleSheet(".QWidget {background-color:   #0ff}")


    def buildLayout(self):
        self.controlWidget = QtGui.QWidget(self) 
        self.plotList  = QtGui.QListWidget(self)
        self.combo  = QtGui.QComboBox(self)
        self.button = QtGui.QPushButton('Plot')        
        self.combo.addItems(\['1','2','3','4'\]) 
        layout = QtGui.QVBoxLayout()
        layout.addWidget(self.plotList)
        layout.addWidget(self.combo)
        layout.addWidget(self.button)
        self.controlWidget.setLayout(layout)
        self.mplFig  = MplGrapher()
        self.splitter = QtGui.QSplitter(QtCore.Qt.Horizontal)
        self.splitter.addWidget(self.controlWidget) 
        self.splitter.addWidget(self.mplFig) 
        self.setCentralWidget(self.splitter)
        QtGui.QApplication.setStyle(QtGui.QStyleFactory.create('Plastique'))
    def buildMenus(self):
        openFile = QtGui.QAction('Open', self)
        self.fileMenu = self.menuBar().addMenu('&File')
        self.fileMenu.addAction(openFile)

class MplGrapher(QtGui.QWidget):
    def __init__(self,parent=None):
        super(MplGrapher, self).__init__(parent)
        self.initFigure()

    def initFigure(self):   
        self.figure = Figure()        
        self.canvas = FigureCanvas(self.figure)
        self.navbar = NavigationToolbar(self.canvas, self) 
        self.figure.add_subplot(1,1,1)
        self.layout = QtGui.QVBoxLayout()
        self.layout.addWidget(self.navbar)
        self.layout.addWidget(self.canvas)
        self.setLayout(self.layout)

if __name__ == '__main__':
    app = QtGui.QApplication(sys.argv)
    main = testGUI()
    main.show()
    sys.exit(app.exec_())

示例GUI

我想我可以通过Maxwell Grady的一些提示找到解决方案。

我更改了以下两行:

self.mplFig.setStyleSheet("QWidget {background-color:   #0ff}")

注意缺少“。” 在QWidget和之前

class MplGrapher(QtGui.QGroupBox):

更改后的GUI图片。 现在我可以实际设置一些样式属性...时间让它不那么难看。

边框颜色的样本。

暂无
暂无

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

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