设置按钮的可检查 QPushbutton 的背景颜色被禁用
Setting background-color of a checkable QPushbutton for button is disabled
我尝试设置pushButton.checked()
的背景色。如果按钮被启用并且pushButton.checked() == False
,它工作正常,它将背景颜色设置为styleSheet()
的disabled
颜色但是如果按钮被禁用并且pushButton.checked() == True
它不会改变背景颜色。
我已经尝试了 this post 中的解决方法,但没有成功。其他一些靠近帖子链接。
下面的例子:使用下方按钮启用(禁用上方按钮并使用上方按钮设置它checked/unchecked和enable/disable它与下方按钮一起看到我的意思。背景如果按钮被禁用,应该始终变灰。
是否需要特殊设置或组合?
import sys
from PyQt5.QtWidgets import *
from PyQt5.QtCore import *
class MainWindow(QMainWindow):
def __init__(self):
QMainWindow.__init__(self)
self.setMinimumSize(300,300)
self.pushButton1 = QPushButton("see css result", self)
self.pushButton1.setCheckable(True)
#self.pushButton1.setAutoFillBackground (True) # mentioned in
self.pushButton1.setStyleSheet(css_pushButton())
self.pushButton1.resize (100, 40)
self.pushButton1.move(50,50)
print("scc1:", self.pushButton1.styleSheet())
self.pushButton_control = QPushButton("Button Enabled", self)
self.pushButton_control.setCheckable(False)
self.pushButton_control.clicked.connect(self.pushButton_control_clicked)
self.pushButton_control.move(50,100)
self.pushButton_control.resize (100, 40)
def pushButton_control_clicked(self):
print("Checked:",self.pushButton1.isChecked())
if self.pushButton1.isEnabled():
print("set False")
self.pushButton1.setEnabled(False)
self.pushButton_control.setText(('DISABLED'))
else:
self.pushButton1.setEnabled(True)
self.pushButton_control.setText(('ENABLED'))
print("set True")
def css_pushButton():
css = '''
QPushButton {
font-size: 10px;
background-color: green;
color: black;
border: 2px green;
border-radius: 22px;
border-style: outset;
}
QPushButton:hover {
background: qradialgradient(
cx: 0.3, cy: -0.4, fx: 0.3, fy: -0.4,
radius: 1.35, stop: 0 grey, stop: 1 lightgray
);
}
QPushButton:enabled{
color: black;
font: 10px;
background: green;
background-color: red;
border: 1px black;
border-style: outset;
}
QPushButton:pressed {
color: white;
background: yellow;
}
QPushButton:disabled {
color: gray;
background-color: gray;
border: 1px black;
border-style: outset;
}
QPushButton:checked{
color: black;
font: 12px;
font: bold;
background-color: red;
border: 1px black;
border-style: outset;
}
QPushButton:!checked{
color: black;
font: 12px;
font: bold;
background-color: green;
border: 1px black;
border-style: outset;
}
'''
return css
if __name__ == "__main__":
app = QApplication (sys.argv)
prog = MainWindow()
prog.show ()
app.exec_ ()
即使在 OOP 中,对象和属性声明的 顺序 也很重要,因为最后一个优先于前一个。这对样式表也有效。
在您的代码中,:checked
和 :!checked
规则优先于(“覆盖”)之前声明的任何 属性,其中包括 :disabled
中指定的内容。
解决方法很简单:把:disabled
块移到最后。
更好的是,使用组合选择器:
QPushButton:disabled {
color: gray;
}
QPushButton:disabled:checked {
background-color: #ffaaaa;
}
QPushButton:disabled:!checked {
background-color: lightGreen;
}
在 Qt 文档中阅读有关 stylesheet conflict resolution 的更多信息。
我尝试设置pushButton.checked()
的背景色。如果按钮被启用并且pushButton.checked() == False
,它工作正常,它将背景颜色设置为styleSheet()
的disabled
颜色但是如果按钮被禁用并且pushButton.checked() == True
它不会改变背景颜色。
我已经尝试了 this post 中的解决方法,但没有成功。其他一些靠近帖子链接。
下面的例子:使用下方按钮启用(禁用上方按钮并使用上方按钮设置它checked/unchecked和enable/disable它与下方按钮一起看到我的意思。背景如果按钮被禁用,应该始终变灰。
是否需要特殊设置或组合?
import sys
from PyQt5.QtWidgets import *
from PyQt5.QtCore import *
class MainWindow(QMainWindow):
def __init__(self):
QMainWindow.__init__(self)
self.setMinimumSize(300,300)
self.pushButton1 = QPushButton("see css result", self)
self.pushButton1.setCheckable(True)
#self.pushButton1.setAutoFillBackground (True) # mentioned in
self.pushButton1.setStyleSheet(css_pushButton())
self.pushButton1.resize (100, 40)
self.pushButton1.move(50,50)
print("scc1:", self.pushButton1.styleSheet())
self.pushButton_control = QPushButton("Button Enabled", self)
self.pushButton_control.setCheckable(False)
self.pushButton_control.clicked.connect(self.pushButton_control_clicked)
self.pushButton_control.move(50,100)
self.pushButton_control.resize (100, 40)
def pushButton_control_clicked(self):
print("Checked:",self.pushButton1.isChecked())
if self.pushButton1.isEnabled():
print("set False")
self.pushButton1.setEnabled(False)
self.pushButton_control.setText(('DISABLED'))
else:
self.pushButton1.setEnabled(True)
self.pushButton_control.setText(('ENABLED'))
print("set True")
def css_pushButton():
css = '''
QPushButton {
font-size: 10px;
background-color: green;
color: black;
border: 2px green;
border-radius: 22px;
border-style: outset;
}
QPushButton:hover {
background: qradialgradient(
cx: 0.3, cy: -0.4, fx: 0.3, fy: -0.4,
radius: 1.35, stop: 0 grey, stop: 1 lightgray
);
}
QPushButton:enabled{
color: black;
font: 10px;
background: green;
background-color: red;
border: 1px black;
border-style: outset;
}
QPushButton:pressed {
color: white;
background: yellow;
}
QPushButton:disabled {
color: gray;
background-color: gray;
border: 1px black;
border-style: outset;
}
QPushButton:checked{
color: black;
font: 12px;
font: bold;
background-color: red;
border: 1px black;
border-style: outset;
}
QPushButton:!checked{
color: black;
font: 12px;
font: bold;
background-color: green;
border: 1px black;
border-style: outset;
}
'''
return css
if __name__ == "__main__":
app = QApplication (sys.argv)
prog = MainWindow()
prog.show ()
app.exec_ ()
即使在 OOP 中,对象和属性声明的 顺序 也很重要,因为最后一个优先于前一个。这对样式表也有效。
在您的代码中,:checked
和 :!checked
规则优先于(“覆盖”)之前声明的任何 属性,其中包括 :disabled
中指定的内容。
解决方法很简单:把:disabled
块移到最后。
更好的是,使用组合选择器:
QPushButton:disabled {
color: gray;
}
QPushButton:disabled:checked {
background-color: #ffaaaa;
}
QPushButton:disabled:!checked {
background-color: lightGreen;
}
在 Qt 文档中阅读有关 stylesheet conflict resolution 的更多信息。