如何动态编程使用PyQt创建的按钮?

时间:2016-03-08 13:21:05

标签: python qt pyqt

所以我有一个名为RunButton的按钮。当我按下它时,我希望它在10秒范围内触及3秒标记时将按钮的背景颜色从红色变为绿色。我就是这样做的:

self.RunButton.clicked.connect(self.run)

def run(self):
    for i in range(10):
        i += 1
        print i
        time.sleep(1)
        if (i == 3):
            self.B18.setStyleSheet("background-color: green")

虽然,当我单击RunButton时,它会打印时间,但是当for循环到达它结束时,按钮B18只会改变颜色,即10秒后,它应该在3之后发生变化。

那么我应该如何改变颜色中间循环呢?

1 个答案:

答案 0 :(得分:3)

首先,当您阻止主线程时,不能进行ui更新。

使用QApplication::processEvents()(来自c ++但它在python中应该是相同的)应该用它来帮助你。

另一件事是,您可以创建一个QTimer来触发这样的重新着色(伪代码,不保证有效):

#class initialisation
self.timer = QTimer()
self.timer.setInterval(3)
self.timer.setSingleShot(True)

self.timer.timeout.connect(lambda x: self.B18.setStyleSheet("background-color: green"))
self.RunButton.clicked.connect(self.timer.start)