【问题标题】:PyQT QAction/QMenu colorPyQT QAction/QMenu 颜色
【发布时间】:2017-02-15 01:32:50
【问题描述】:

我正在尝试找到一种方法来为菜单项设置不同的颜色。

例如,Web Guide 是蓝色的,Email Support 是红色的,1.0 版是透明的。

我看了一会儿如何做到这一点,并尝试了 Qlabel 和 QWidgetAction,但这似乎只是作为文本,而不是与动作相同的方式。

我觉得这比它的价值更痛苦,但我想我还是把它扔在那里。

这就是我设置样式表和操作的方式:

    self.setStyleSheet("""
        QMenuBar {
            background-color: rgb(49,49,49);
            color: rgb(255,255,255);
            border: 1px solid ;
        }

        QMenuBar::item {
            background-color: rgb(49,49,49);
            color: rgb(255,255,255);
        }

        QMenuBar::item::selected {
            background-color: rgb(30,30,30);
        }

        QMenu {
            background-color: rgb(49,49,49);
            color: rgb(255,255,255);
            border: 1px solid ;
        }

        QMenu::item::selected {
            background-color: rgb(30,30,30);

        }
    """)

    self.XactionHelpFAQ = QtGui.QAction('Web Guide', self)
    self.XactionHelpEmail = QtGui.QAction('Email Support', self)
    self.XactionHelpVersion = QtGui.QAction('Version 1.0', self)

    self.Xmenubar = QtGui.QMenuBar(self)
    self.Xmenubar.setObjectName('menubar')
    self.Xmenubar.setGeometry(QtCore.QRect(0, 0, 684, 21))
    self.Xmenubar.setSizeIncrement(QtCore.QSize(0, 0))
    self.Xmenubar.setDefaultUp(False)

    self.XmenuHelp = QtGui.QMenu('Help', self.Xmenubar)
    self.XmenuHelp.addAction(self.XactionHelpFAQ)
    self.XmenuHelp.addAction(self.XactionHelpEmail)
    self.XmenuHelp.addAction(self.XactionHelpVersion)

【问题讨论】:

  • 根据您的代码,您正在将样式表应用于包含您的 MenuBar 和 Menu 的 Widget,但不应用于 self.Xmenubarself.XmenuHelp 对象。尝试写self.Xmenubar.self.setStyleSheet(...)self.XmenuHelp.setStyleSheet(...)。为了改进您的代码,您可以简单地将整个样式表设置为您的 QApplication 对象,这样您就可以确保您的样式表适用于所有 Qt 对象。
  • 好电话,现在我的第二个窗口没有相同的菜单栏样式表了 :) 谢谢,这个 Ui 东西真的很繁琐。
  • 是的,我确认 :)

标签: python pyqt


【解决方案1】:

如果您想应用样式表,您需要将它应用到您正在“样式化”的小部件上。

self.Xmenubar = QtGui.QMenuBar(self)
[...]
self.Xmenubar.setStyleSheet("""
    QMenuBar {
        background-color: rgb(49,49,49);
        color: rgb(255,255,255);
        border: 1px solid ;
    }

    QMenuBar::item {
        background-color: rgb(49,49,49);
        color: rgb(255,255,255);
    }

    QMenuBar::item::selected {
        background-color: rgb(30,30,30);
    }
""")

self.XmenuHelp = QtGui.QMenu('Help', self.Xmenubar)
[...]
self.XmenuHelp.setStyleSheet("""
    QMenu {
        background-color: rgb(49,49,49);
        color: rgb(255,255,255);
        border: 1px solid ;
    }

    QMenu::item::selected {
        background-color: rgb(30,30,30);

    }
""")

在大多数情况下,您只需将通用样式表应用于QApplication 对象,并将某些特定样式表应用于Qt 对象,这将覆盖应用于QApplication 的样式表

【讨论】:

  • 谢谢!这使得帮助栏下的所有内容都变成了不同的颜色。我一直在寻找一些不同色调的物品,但认为这可能太过分了。这会做得很好!
  • 没问题!我建议您打开一个新问题,显示您需要的屏幕截图,我们可以尝试帮助您:) 我们从问题和答案中学习。
  • @AdamSirrelle 您能否提供适合您的代码?
  • 这是 5 年前的,所以这段代码可能不是最好的,但似乎我按照 syedelec 的建议做了。虽然,我没有设置一个小部件的样式表,而是在调用整个小部件后对其进行了 setStyleSheet。这可能不是最好的方法,因为样式表会影响设置它的小部件的所有小部件子级。您可以通过使用# 指定名称来解决这个问题,但无论如何,下一个注释将是我使用的。希望对您有所帮助!
  • app.setStyleSheet("""QMenuBar {background-color: rgb(49,49,49); color: rgb(255,255,255); border: 1px solid ;} QMenuBar::item {background-color: rgb(49,49,49); color: rgb(255,255,255);} QMenuBar::item::selected {background-color: rgb(30,30,30);} QMenu {background-color: rgb(49,49,49); color: rgb(255,255,255); border: 1px solid ;} QMenu::item::selected {background-color: rgb(30,30,30);}""")
猜你喜欢
  • 2017-11-06
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-08-28
  • 1970-01-01
相关资源
最近更新 更多