如何使用PySide将可检查样式表属性应用于多个QPushButtons?

问题描述 投票:0回答:1

我使用Python 3.5和PySide 1.2.2在Linux机器上(Ubuntu 16.04)。

如果我有QPushButtons不可检查,并且我只设置了样式表一次,按钮就会按照我想要的方式显示。但是,如果我让它们可以检查,Qt想要专注且不专注的风格,优先考虑我要求的那些。

#!/usr/bin/env python3
# -*- coding: utf-8 -*-

import sys
import os

from PySide.QtCore import *
from PySide.QtGui  import *

class UI(QDialog):

    def __init__(self, *args, **kwargs):
        super(UI, self).__init__(**kwargs)

        outerBox = QGroupBox(self)
        outerBox.setGeometry(50, 50, 200, 150)
        outerBox.setObjectName("outerBox")

        brokenCss  = "QPushButton:unchecked {"
        brokenCss += "  background-color:  #ce9a9a;"  # red-ish
        brokenCss += "  border: 1px outset #000000;"
        brokenCss += "  border-radius: 6px;"
        brokenCss += "}"
        brokenCss += "QPushButton:checked {"
        brokenCss += "  background-color:  #12f785;"  # green-ish
        brokenCss += "  border: 1px inset  #000000;"
        brokenCss += "  border-radius: 6px;"
        brokenCss += "}"

        broken = []
        for i in range(2):
            broken.append(QPushButton(outerBox))
            broken[i].setObjectName("broken{0}".format(i))
            broken[i].setGeometry(15, (35 * (i + 1)), 100, 20)
            broken[i].setText("Broken CSS {0}".format(i))
            broken[i].setCheckable(True)
            broken[i].setChecked(False)
            broken[i].setStyleSheet(brokenCss)


if __name__ == '__main__':
    app = QApplication(sys.argv)
    ui = UI()
    ui.showFullScreen()
    sys.exit(app.exec_())

我希望上面会在启动时产生两个红色按钮,然后一旦按下一次就会变成绿色并保持绿色状态(再次点击时再转回红色按钮)。相反,我看到:

A focused button and an unfocused button

一旦它们被点击它们,它们每个都变成绿色,但是最近点击的颜色稍微更暗,表示焦点,我想。但是将它们切换回来会再次给我上面的图像,而不是两个红色按钮。

我曾尝试为:default:flat和其他几个伪状态添加CSS“节”,但都无济于事。

python pyside stylesheet qpushbutton
1个回答
0
投票

显然,文档与现实不符。 uncheckedchecked是记录的方式来做我想要的,但在尝试了同样无效的offon之后,我尝试了closedopen,正如我从文档中所理解的那样,它只应用于附带菜单的QPushButtons 。尽管如此,这很有效。 (它似乎没有做outsetinset,但它的颜色正确。)

我也切换到PyQt5以查看是否会有更改,但它的行为与PySide相同。

#!/usr/bin/env python3
# -*- coding: utf-8 -*-

import sys
import os

from PySide.QtCore import *
from PySide.QtGui  import *

class UI(QDialog):

    def __init__(self, *args, **kwargs):
        super(UI, self).__init__(**kwargs)

        outerBox = QGroupBox(self)
        outerBox.setGeometry(50, 50, 200, 150)
        outerBox.setObjectName("outerBox")

        brokenCss  = "QPushButton:closed {"
        brokenCss += "  background-color:  #ce9a9a;"  # red-ish
        brokenCss += "  border: 1px outset #000000;"
        brokenCss += "  border-radius: 6px;"
        brokenCss += "}"
        brokenCss += "QPushButton:open {"
        brokenCss += "  background-color:  #12f785;"  # green-ish
        brokenCss += "  border: 1px inset  #000000;"
        brokenCss += "  border-radius: 6px;"
        brokenCss += "}"

        broken = []
        for i in range(2):
            broken.append(QPushButton(outerBox))
            broken[i].setObjectName("broken{0}".format(i))
            broken[i].setGeometry(15, (35 * (i + 1)), 100, 20)
            broken[i].setText("Broken CSS {0}".format(i))
            broken[i].setCheckable(True)
            broken[i].setChecked(False)
            broken[i].setStyleSheet(brokenCss)


if __name__ == '__main__':
    app = QApplication(sys.argv)
    ui = UI()
    ui.showFullScreen()
    sys.exit(app.exec_())
© www.soinside.com 2019 - 2024. All rights reserved.