Pergunta

Eu normalmente escrever scipts Python para fazer as tarefas de conversão para mim e sempre que eu escrever um que leva um tempo eu uso esta pequena barra de progresso para verificar isso

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

Eu tenho 2 perguntas:

Como faço para torná-lo fechar-se quando atinge 100% (Ele permanece aberto e se você fechar o shell python antes de clicar no botão X você bater-lo.)

Além disso, quando ele perde e recupera o foco, ele pára de pintar corretamente. o processo continuará até o final, mas o espaço barra de progresso é todo branco. Como posso lidar com isso?

Foi útil?

Solução

Bem, porque você definir o seu máximo a 10, sua barra de progresso não deve chegar a 100%, porque

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

só vai iterate até 9.

As barras de progresso não se fecham automaticamente. Você terá que chamar

barra.hide()

após o loop.

Quanto ao problema de pintura, é provável porque o que quer roteiro você executou este script de está no mesmo segmento como a barra de progresso. Então, quando você mudar de distância e apoiar os eventos de pintura são atrasados ??pelo processamento real do script pai. Você pode definir um temporizador para .Update periodicamente call () ou .repaint () em 'barra' (update () é recomendado sobre repaint ()) ou você quer que seu código de processamento principal para executar em um QThread, que também está disponível no código PyQt, mas que vai exigir alguma leitura de sua parte:)

O doc é para Qt, mas ela se aplica a PyQt assim:

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

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top