【问题标题】:How do I make this progress bar close when it is done完成后如何关闭此进度条
【发布时间】:2010-10-18 11:37:16
【问题描述】:

我通常编写 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 外壳,则会使其崩溃。)

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

【问题讨论】:

    标签: python pyqt progress-bar


    【解决方案1】:

    好吧,因为您将最大值设置为 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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2016-03-30
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-09-16
      • 2011-07-27
      相关资源
      最近更新 更多