【问题标题】:How to apply CSS Style to QMenu via an entire MainWIndow如何通过整个 MainWINdow 将 CSS 样式应用于 QMenu
【发布时间】:2015-03-14 12:48:56
【问题描述】:

运行下面的示例代码会创建一个按钮窗口。单击该按钮会弹出一个下拉菜单。

当 CSS 'appStyle' 直接应用于 menu 时,它似乎运行良好:

menu.setStyleSheet(appStyle)

但是当使用相同的 CSS 'appStyle' 分配给整个窗口时:

view.setStyleSheet(appStyle)

什么都没有发生(只需注释掉menu.setStyleSheet(appStyle) 即可查看)。 如果 CSS 样式表对整个视图只有一次,而不是对每个菜单或每个小部件单独使用,那就太好了。如何实现?

bgColor='#1F1F1F'
appStyle="""
QMenu {{  font-size:10pt; selection-background-color: #ffaa00; selection-color: black; background-color: #7A7A7A; border-style: solid; border: 0px solid #EBEBEB; border-radius: 0; color: #EBEBEB; padding: 0px 0px 0px 0px; }}
QMenu:on  {{padding-top: 0px; padding-left: 0px; background-color: #7A7A7A; selection-background-color: #ffaa00; color: #EBEBEB; border-radius: 0;}}
QMenu QAbstractItemView  {{ border: 0px solid black; background-color: #7A7A7A; color: #EBEBEB; border-radius: 0; }}
QMenu:hover {{ border: 0px solid #ffa02f; }}
QMenu::drop-down  {{ border-radius: 0px; background-color: #7A7A7A; color: #EBEBEB; }}""".format(bgColor) 


from PyQt4.QtCore import *
from PyQt4.QtGui import *

class Window(QMainWindow):
    def __init__(self):
        super(Window, self).__init__() 
        button=QToolButton(self)
        button.setText('Click Here')

        menu=QMenu()
        menu.addAction("Action01")
        menu.addAction("Action02")
        menu.addAction("Action03")

        separator=menu.addAction("")
        separator.setSeparator(True)

        subMenu=menu.addMenu('SubMenu')
        subMenu.addAction("SubAction01")
        subMenu.addAction("SubAction02")
        subMenu.addAction("SubAction03")   

        button.setMenu(menu)
        button.setPopupMode(QToolButton.InstantPopup)
        menu.setStyleSheet(appStyle)   


app=QApplication(sys.argv)    
view=Window() 
view.setStyleSheet(appStyle)
view.show()
sys.exit(app.exec_())

【问题讨论】:

    标签: python css qt pyqt stylesheet


    【解决方案1】:

    QMenu 声明上传递视图self 的实例。 所以,而不是:

    menu=QMenu()
    

    做:

    menu=QMenu(self)
    

    现在,当样式表应用于主窗口时,其样式表会沿其子窗口传播 - 在本例中为 menubutton 实例。

    工作代码如下:

    bgColor='#1F1F1F'
    appStyle="""
    QToolButton {{border: 0px solid #0F0F0F; background-color: QLinearGradient( x1: 0, y1: 0, x2: 0, y2: 1, stop: 0 #7A7A7A, stop: 1 #0F0F0F); color: #EBEBEB}}
    QMenu QAbstractItemView  {{ border: 0px solid black; background-color: #7A7A7A; color: #EBEBEB; border-radius: 0; }}
    QMenu {{  font-size:10pt; selection-background-color: #ffaa00; selection-color: black; background-color: #7A7A7A; border-style: solid; border: 0px solid #EBEBEB; border-radius: 0; color: #EBEBEB; padding: 0px 0px 0px 0px; }}
    QMenu:on  {{padding-top: 0px; padding-left: 0px; background-color: #7A7A7A; selection-background-color: #ffaa00; color: #EBEBEB; border-radius: 0;}}
    QMenu:hover {{ border: 0px solid #ffa02f; }}
    QMenu::drop-down  {{ border-radius: 0px; background-color: #7A7A7A; color: #EBEBEB; }}""".format(bgColor) 
    
    class Window(QMainWindow):
        def __init__(self):
            super(Window, self).__init__() 
            button=QToolButton(self)
            button.setText('Click Here')
    
            menu=QMenu(self)
            menu.addAction("Action01")
            menu.addAction("Action02")
            menu.addAction("Action03")
    
            separator=menu.addAction("")
            separator.setSeparator(True)
    
            subMenu=menu.addMenu('SubMenu')
            subMenu.addAction("SubAction01")
            subMenu.addAction("SubAction02")
            subMenu.addAction("SubAction03")   
    
            button.setMenu(menu)
            button.setPopupMode(QToolButton.InstantPopup)
    
    app=QApplication(sys.argv)
    view=Window() 
    view.setStyleSheet(appStyle)
    view.show()
    sys.exit(app.exec_())
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2016-07-15
      • 1970-01-01
      • 2010-12-22
      • 1970-01-01
      • 2016-02-11
      • 2015-12-16
      • 2019-07-24
      • 1970-01-01
      相关资源
      最近更新 更多