1

私は通常、変換タスクを実行する Python scipt を作成し、時間がかかるものを作成するたびに、この小さなプログレス バーを使用して確認します。

import sys
import time
from PyQt4 import QtGui
app = QtGui.QApplication(sys.argv)
barra = QtGui.QProgressBar()
barra.show()
barra.setMinimum(0)
barra.setMaximum(10)
for a in range(10):
    time.sleep(1)
    barra.setValue(a)
app.exec_()

2 つの質問があります。

100% に達したときに自動的に閉じるにはどうすればよいですか (開いたままになり、X ボタンをクリックする前に Python シェルを閉じるとクラッシュします)。

また、フォーカスを失って回復すると、正しく描画されなくなります。プロセスは完了するまで続行しますが、進行状況バーのスペースはすべて白です。どうすればこれを処理できますか?

4

1 に答える 1

5

最大値を10に設定したので、プログレスバーが100%に達しないはずです。

for a in range(10):
  time.sleep(1)
  barra.setValue(a)

9までしか繰り返しません。

プログレスバーは自動的に閉じません。あなたは電話する必要があります

barra.hide()

ループの後。

ペイントの問題については、このスクリプトを実行したスクリプトがプログレスバーと同じスレッドにあることが原因である可能性があります。したがって、切り替えて元に戻すと、親スクリプトの実際の処理によってペイントイベントが遅延します。'barra'で.update()または.repaint()を定期的に呼び出すようにタイマーを設定するか(repaint()よりもupdate()をお勧めします) 、メインの処理コードをQThreadで実行することもできます。 PyQtコードで利用可能ですが、それはあなたの側でいくらかの読書を必要とします:)

ドキュメントはQt用ですが、PyQtにも適用されます。

https://doc.qt.io/qt-4.8/threads.html

于 2009-04-09T13:06:58.043 に答える