Python Pyqt5检查按钮颜色并更改按钮颜色

Python Pyqt5检查按钮颜色并更改按钮颜色,python,pyqt5,Python,Pyqt5,我用PyQt5创建了一个按钮。按钮的原始背景色为灰色。如果它的背景色是灰色,当我按下它时,它的背景色将变为红色。如果它的背景色是红色,当我按下它时,它将变为灰色。 下面是我的代码 from PyQt5 import QtCore, QtGui, QtWidgets class Ui_MainWindow(object): def setupUi(self, MainWindow): MainWindow.setObjectName("MainWindow")

我用PyQt5创建了一个按钮。按钮的原始背景色为灰色。如果它的背景色是灰色,当我按下它时,它的背景色将变为红色。如果它的背景色是红色,当我按下它时,它将变为灰色。 下面是我的代码

from PyQt5 import QtCore, QtGui, QtWidgets
class Ui_MainWindow(object):
    def setupUi(self, MainWindow):
        MainWindow.setObjectName("MainWindow")
        MainWindow.resize(800, 600)
        self.centralwidget = QtWidgets.QWidget(MainWindow)
        self.centralwidget.setObjectName("centralwidget")
        self.pushButton = QtWidgets.QPushButton(self.centralwidget)
        self.pushButton.setGeometry(QtCore.QRect(270, 200, 221, 71))
        self.pushButton.setStyleSheet("background-color: gray;")
        self.pushButton.setText("")
        self.pushButton.setObjectName("pushButton")
        self.pushButton.clicked.connect(self.action)
        MainWindow.setCentralWidget(self.centralwidget)

        self.retranslateUi(MainWindow)
        QtCore.QMetaObject.connectSlotsByName(MainWindow)

    def retranslateUi(self, MainWindow):
        _translate = QtCore.QCoreApplication.translate
        MainWindow.setWindowTitle(_translate("MainWindow", "MainWindow"))

    def action(self):
        if self.pushButton.setStyleSheet["background-color"] == "gray":
            self.pushButton.setStyleSheet("background-color: red;")
        else:
            self.pushButton.setStyleSheet("background-color: gray;")
if __name__ == "__main__":
   import sys
   app = QtWidgets.QApplication(sys.argv)
   MainWindow = QtWidgets.QMainWindow()
   ui = Ui_MainWindow()
   ui.setupUi(MainWindow)
   MainWindow.show()
   sys.exit(app.exec_())
代码在“if”行中有错误。我不知道如何检查按钮的背景色。 如果我使用tkinter创建按钮。我知道如何检查按钮的背景色

if self.buttons["bg"] == "gray":
但现在我想知道如何使用PyQt5检查按钮背景色

if self.pushButton.setStyleSheet["background-color"] == "gray":

由于对函数使用方括号(用于从列表或字典等对象获取特定项),因此代码无法工作。
另外,
setStyleSheet()
用于设置样式表,而您可能希望对照现有的样式表进行检查,该样式表随
stylesheet()
返回

这将修复错误并使颜色开关正常工作:

        if self.pushButton.styleSheet() == "background-color: gray;":
无论如何,我不会建议使用这种方法,因为这只在样式表字符串正好是这样的情况下才有效

不幸的是,无法通过编程方式通过样式表设置属性。
使用
setStyleSheet
时,其内容由Qt内部解析和处理,设置的属性永远不会公开;你没有一个可以与之交互的“对象”,所以如果“背景色”==“灰色”,就没有办法做类似的事情

这也意味着,如果您使用更复杂的css,您需要检查样式表的全部内容,然后完全重新设置,因为
setStyleSheet
完全覆盖了现有的样式表

如果您想坚持使用css,您可以创建一个“模板”样式表(还允许您添加其他属性),并使用内部属性跟踪颜色:

class Ui_MainWindow(object):
    buttonStyleSheet = """
        color: white;
        background-color: {};
    """
    def setupUi(self, MainWindow):
        MainWindow.setObjectName("MainWindow")
        MainWindow.resize(800, 600)
        self.centralwidget = QtWidgets.QWidget(MainWindow)
        self.centralwidget.setObjectName("centralwidget")
        self.pushButton = QtWidgets.QPushButton(self.centralwidget)
        self.pushButton.setGeometry(QtCore.QRect(270, 200, 221, 71))
        self.pushButton.currentBackground = "gray"
        self.pushButton.setStyleSheet(self.buttonStyleSheet.format(self.pushButton.currentBackground))
        self.pushButton.setText("button")
        self.pushButton.setObjectName("pushButton")
        self.pushButton.clicked.connect(self.action)
        MainWindow.setCentralWidget(self.centralwidget)

        self.retranslateUi(MainWindow)
        QtCore.QMetaObject.connectSlotsByName(MainWindow)

    def retranslateUi(self, MainWindow):
        _translate = QtCore.QCoreApplication.translate
        MainWindow.setWindowTitle(_translate("MainWindow", "MainWindow"))

    def action(self):
        if self.pushButton.currentBackground == "gray":
            self.pushButton.currentBackground = "red"
            self.pushButton.setStyleSheet(self.buttonStyleSheet.format("red"))
        else:
            self.pushButton.currentBackground = "gray"
            self.pushButton.setStyleSheet(self.buttonStyleSheet.format("gray"))
PS:我强烈建议您不要编辑由
pyuic
生成的python文件来创建您的程序;阅读有关如何正确操作的官方文档。

应该适合您。