完成后如何关闭此进度条

Nat*_*han 1 python pyqt progress-bar

我通常编写 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_()
Run Code Online (Sandbox Code Playgroud)

我有两个问题:

我如何让它在达到 100% 时自行关闭(它保持打开状态,如果您在单击 X 按钮之前关闭 python shell,则会使其崩溃。)

此外,当它失去并重新获得焦点时,它会停止正确绘画。该过程将继续完成,但进度条空间全是白色。我该如何处理?

小智 5

好吧,因为您将最大值设置为 10,所以您的进度条不应达到 100%,因为

for a in range(10):
  time.sleep(1)
  barra.setValue(a)
Run Code Online (Sandbox Code Playgroud)

最多只能迭代 9 次。

进度条不会自动关闭。你将不得不打电话

barra.hide()
Run Code Online (Sandbox Code Playgroud)

在你的循环之后。

至于绘画问题,很可能是因为您运行此脚本的任何脚本都与进度条在同一线程中。因此,当您切换并返回时,绘制事件会被父脚本的实际处理延迟。您可以设置一个计时器来定期调用 'barra' 上的 .update() 或 .repaint()(推荐使用 update() 而不是 repaint()),或者您希望您的主要处理代码在 QThread 中运行,这也是在 PyQt 代码中可用,但这需要您阅读一些内容:)

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

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