完成后如何使此进度条关闭

时间:2009-04-09 04:42:59

标签: 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_()

我有两个问题:

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

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

1 个答案:

答案 0 :(得分:4)

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

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

只会迭代到9。

进度条不会自动关闭。你必须致电

barra.hide()
循环后

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

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

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