我使用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_())
我希望上面会在启动时产生两个红色按钮,然后一旦按下一次就会变成绿色并保持绿色状态(再次点击时再转回红色按钮)。相反,我看到:
一旦它们被点击它们,它们每个都变成绿色,但是最近点击的颜色稍微更暗,表示焦点,我想。但是将它们切换回来会再次给我上面的图像,而不是两个红色按钮。
我曾尝试为:default
,:flat
和其他几个伪状态添加CSS“节”,但都无济于事。
显然,文档与现实不符。 unchecked
和checked
是记录的方式来做我想要的,但在尝试了同样无效的off
和on
之后,我尝试了closed
和open
,正如我从文档中所理解的那样,它只应用于附带菜单的QPushButtons 。尽管如此,这很有效。 (它似乎没有做outset
和inset
,但它的颜色正确。)
我也切换到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_())