1

我通常编写 Python scipts 来为我完成转换任务,每当我写一个需要一段时间的时候,我都会使用这个小进度条来检查它

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_()

我有两个问题:

当它达到 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()(建议使用 update() 而不是 repaint()),或者您希望主处理代码在 QThread 中运行,这也是在 PyQt 代码中可用,但这需要您阅读 :)

该文档适用于 Qt,但也适用于 PyQt:

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

于 2009-04-09T13:06:58.043 回答