我经常编写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,则会使其崩溃。)
此外,当它失去并重新获得焦点时,它会停止正确绘画。该过程将继续完成,但进度条空间全是白色。我该如何处理?
答案 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: