В моей программе (PyQT) мне нужно выполнить тяжелую операцию, и я хочу отображать индикатор (в данном случае индикатор выполнения) во время процесса.Индикатор выполнения можно установить в «Режим ожидания», выполнив self.progressBar.setRange (0,0) .
Проблема: Мой бар всегда идет от 0 (даже не запущен) до 100 (Готово).Никогда не установлен в «Режим ожидания».Я использую глобальную переменную, чтобы увидеть, завершен ли процесс, и передать информацию обоим классам или потокам.
Вот код.
# Link to GUI
qtCreatorFile = "interaface.ui"
Ui_MainWindow, QtBaseClass = uic.loadUiType(qtCreatorFile)
ready = False
class Process(QtGui.QMainWindow, Ui_MainWindow):
def __init__(self, parent = None):
# Setting-ip UI
QtGui.QMainWindow.__init__(self)
Ui_MainWindow.__init__(self)
self.setupUi(self)
# Setting Progress Bar to 0 and initial message
self.progressBar.setValue(0)
self.resultLabel.setText("Not ready")
# Button
self.runButton.clicked.connect(self.onStart)
# Thread
self.myLongTask = TaskThread()
self.myLongTask.taskFinished.connect(self.onFinished)
def onStart(self):
global ready
ready = False
print "Activate Waiting Bar Mode and message"
self.progressBar.setRange(0,0)
self.resultLabel.setText("Wait")
print "Deactivate Waiting Bar Mode and message"
print "INITIALIZE THREAD"
self.myLongTask.start()
# Simulate heavy process
print "DOING TASK..."
i = 1
for i in range (9999999):
u = i*2
ready = True
print "TASK DONE"
def onFinished(self):
print "onFinished executed and set Progress Bar to 1"
self.progressBar.setRange(0,1)
self.progressBar.setValue(1)
self.resultLabel.setText("Done")
class TaskThread(QtCore.QThread):
taskFinished = QtCore.pyqtSignal()
def run(self):
global ready
temp = True
while temp == True:
if ready == False:
print "(THREAD)Process not finished yet"
else:
print "(THREAD)Process done"
self.taskFinished.emit()
temp = False
def main():
app = QtGui.QApplication(sys.argv)
window = BagTool()
window.show()
sys.exit(app.exec_())
if __name__ == '__main__':
main()
PS.Я использую .ui для интерфейса.У меня есть только QPushButton и QProgressBar
Процесс должен быть: 1- Изначально бар на 0 2- Нажать кнопку.Запустите процесс, и панель начнет двигаться. 3- Когда процесс завершится, панель будет завершена.
Если вы запустите код (с интерфейсом, имеющим эти два QWidget), вы увидите, что процесс занимает, возможно, одну секунду, НОв течение этой секунды индикатор прогресса всегда остается равным 0 (в этом режиме ожидания он должен перемещаться с одной стороны на другую).Когда он заканчивается, на панели отображается 1 и сообщение «Готово».
Что я делаю не так?Спасибо за помощь!