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

时间:2019-11-23 13:35:42

标签: python pyqt5

我通过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":

1 个答案:

答案 0 :(得分:0)

您的代码不起作用,因为您在函数上使用了方括号(用于从列表或字典等对象中获取特定项)。
此外,setStyleSheet()用于设置样式表,而您可能想查看由styleSheet()返回的现有样式表。

这将解决错误并使颜色开关正常工作:

        if self.pushButton.styleSheet() == "background-color: gray;":

无论如何我不会建议这种方法,因为只有在样式表 string 就是这样的情况下,这种方法才有效。

不幸的是,无法通过样式表以编程方式获取设置的属性。
使用setStyleSheet时,其内容由Qt内部解析和处理,并且设置的属性从不公开。您没有可以与之交互的“对象”,因此无法进行类似if "background-color" == "gray"的操作。

这也意味着,如果您使用更复杂的CSS,则您需要检查样式表的全部内容并重新设置,因为{{1} }完全覆盖现有的。

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

setStyleSheet

PS:我强烈建议您编辑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")) 生成的python文件来创建程序;请阅读有关如何正确use the files created with Designer的官方文档。