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 に答える