从插槽 PyQt 更改背景颜色

Posted

技术标签:

【中文标题】从插槽 PyQt 更改背景颜色【英文标题】:Change background color from slot PyQt 【发布时间】:2017-08-09 14:20:36 【问题描述】:

我希望能够从插槽更改我的应用程序的颜色。例如,如果用户在qlabel 中输入了错误的数据,整个 QWidget 就会变成红色。

show()之前的代码中改变颜色很容易,像这样:

from PyQt5 import Qt
import sys

app = QtWidgets.QApplication(sys.argv)
window = QWidget()
p = window.palette()
p.setColor(window.backgroundRole(), QtCore.Qt.red)
window.setPalette(p)
window.show()
sys.exit(app.exec_())

但是如果我有这个结构,我不知道如何改变槽中的颜色:

class MyWindow(QtWidgets.QWidget):
    def __init__(self, parent=None):
        QtWidgets.QDialog.__init__(self, parent) 
        uic.loadUi("file.ui", self)
        self.sendButton.clicked.connect(self.change_color)

    # what should be in change-color slot?
    def change_color(self):
        #.....?

if __name__ == "__main__":
    import sys
    app = QtWidgets.QApplication(sys.argv)
    window = MyWindow()
    window.show()
    sys.exit(app.exec_()) 

我应该以某种方式在插槽中调用 QWidget 的指针吗?

在这里实现正确功能的方法是什么?

【问题讨论】:

"我应该以某种方式调用插槽中 QWidget 的指针吗?"你当然应该。在 Python 中称为 self。 【参考方案1】:

类的实例是您传递给方法的第一个参数,在您的情况下是self,因此您必须执行以下操作:

def checks(self):
    p = self.palette()
    p.setColor(self.backgroundRole(), QtCore.Qt.red)
    self.setPalette(p)

【讨论】:

以上是关于从插槽 PyQt 更改背景颜色的主要内容,如果未能解决你的问题,请参考以下文章

PyQt 在不重置样式的情况下更改 QPushButton 背景颜色

如何在pyqt中更改Qtablewidget的特定单元格背景颜色

Matplotlib pyqt 导航工具栏更改“图形选项”的背景颜色

PyQt - 基于值更新闪烁背景颜色

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

如何为 QPushButton 的背景颜色设置动画(动态更改按钮颜色)