Как мне закрыть этот индикатор выполнения, когда это будет сделано

StackOverflow https://stackoverflow.com/questions/732829

  •  06-09-2019
  •  | 
  •  

Вопрос

Обычно я пишу скрипты на Python для выполнения задач преобразования за себя, и всякий раз, когда я пишу что-то, что занимает некоторое время, я использую этот небольшой индикатор выполнения, чтобы проверить это

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

У меня есть 2 вопроса:

Как мне заставить его закрыться, когда он достигнет 100% (Он остается открытым, и если вы закроете оболочку python перед нажатием кнопки X, вы ее отключите.)

кроме того, когда он теряет и восстанавливает фокус, он перестает корректно рисовать.процесс будет продолжаться до завершения, но все пространство индикатора выполнения будет белым.Как мне с этим справиться?

Это было полезно?

Решение

Ну, поскольку вы установили максимум на 10, ваш индикатор выполнения не должен достигать 100%, потому что

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

будет повторяться только до 9.

Индикаторы выполнения не закрываются автоматически.Вам придется позвонить

barra.hide()

после вашего цикла.

Что касается проблемы с paint, то, скорее всего, это связано с тем, что любой скрипт, из которого вы запустили этот скрипт, находится в том же потоке, что и индикатор выполнения.Таким образом, когда вы переключаетесь прочь и обратно, события рисования задерживаются фактической обработкой родительского скрипта.Вы можете либо установить таймер для периодического вызова .update(), либо .repaint() на 'barra' (рекомендуется обновлять () вместо repaint()) или вы бы хотели, чтобы ваш основной код обработки выполнялся в QThread, который также доступен в коде PyQt, но это потребует некоторого чтения с вашей стороны :)

Документ предназначен для Qt, но он применим и к PyQt:

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

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top