所以我有一个名为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之后发生变化。
那么我应该如何改变颜色中间循环呢?
答案 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)