1

我有以下内容:

 self.testTxt = QtGui.QLabel("0")
 .
 .
 for i in range(10):
        sleep(1)
        self.testTxt.setText(unicode(i))

但 QLabel 直到循环结束才会更新

我试过了:

self.processEvents()
self.testTxt.update()

但无济于事。

有谁碰巧知道为什么?

提前致谢

4

1 回答 1

3

文本框不会更新,因为程序被绑定在 for 循环中,因此永远不会回到 Qt 的事件循环来重绘小部件。调用 testTxt.update() 无济于事,因为正如QWidget 文档所述,update() 只是为下一次运行事件循环时安排重绘(无论如何,当您调用 setText 时会处理这一点)。

可能的解决方案:

  • 使用 QTimer 重复调用更新文本的函数(这是首选解决方案)
  • 每次调用 setText 后调用 testText.repaint()
  • 每次调用 setText 后调用 QApplication.processEvents()
于 2012-08-06T22:40:21.393 回答