Pyside setText()没有更新QLabel

时间:2012-08-06 22:02:33

标签: python qt pyside

我有以下内容:

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

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

我试过了:

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

但无济于事。

有谁碰巧知道为什么?

提前致谢

1 个答案:

答案 0 :(得分:2)

文本框不会更新,因为程序在for循环中被绑定,因此永远不会回到Qt的事件循环来重绘小部件。调用testTxt.update()没有帮助,因为,正如QWidget documentation状态,update()只是计划重新绘制,以便下次运行事件循环(并且这需要处理无论如何你调用setText)。

可能的解决方案:

  • 使用QTimer重复调用更新文本的函数(这是首选解决方案)
  • 每次调用setText
  • 后调用testText.repaint()
  • 在每次调用setText
  • 后调用QApplication.processEvents()