2009-04-09 1 views
2

Я обычно пишу 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_() 

у меня 2 вопроса:

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

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

ответ

4

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

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

только итерацию до 9. баров

Прогресс не закрывается автоматически. Вам необходимо позвонить по телефону

barra.hide() 

после вашей петли.

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

Док для Qt, но это относится к PyQt, а также:

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

Смежные вопросы