Как правильно добавить ProgressBar? ⇐ Python
-
Гость
Как правильно добавить ProgressBar?
введите здесь описание изображения
Как интегрировать индикатор выполнения в мой проект PyQt5, чтобы он мог отслеживать ход загрузки и анализа изображений. Как вариант я использую библиотеку QThread для работы с многопоточностью, но рассматриваю и другие варианты. Алгоритм следующий: 1. Нажатие кнопки 2. Откроется диалоговое окно и начнется загрузка (на данный момент оно просто заполняет индикатор выполнения до 100). 3.Откроется следующее окно – загрузка завершена. 4.Открывается последнее окно - результаты анализа.
Во время выполнения моей программы я смог нажать кнопку, чтобы открыть диалоговое окно, в котором отображается индикатор выполнения. После его заполнения программа просто закрывает все окна (это неправильно), включая окно меню, но работа программы не ставится на паузу. По словам программы, она должна закрывать не окно меню, а только окно с Прогресс-баром, и на его месте отображать диалоговое окно - «Загрузка успешна». Далее это окно следует закрыть через определенный промежуток времени, а на его месте должно появиться окно с результатами анализа.
Что касается всех этих функций вызова окон, я просто адаптирую функциональность метода «connect» объекта «Кнопка».
Если бы сюда в качестве аргумента можно было бы добавить функцию с существующим аргументом (открытием окна), я бы это сделал. Но вызывать можно только имена функций, поэтому нам приходится добавлять именованные функции.
По поводу импорта других окон, например настроек - для Qt Designer есть шаблон, то есть просто набор класса Ui Dialog с параметрами окна, поэтому я их сюда не добавлял
Ниже приведен мой код из основного файла. Если у вас есть еще предложения, буду очень признателен.
из импорта PyQt5.QtWidgets * из PyQt5.QtCore импортировать QThread, pyqtSignal из PyQt5 импортировать QtWidgets, QtCore, QtGui из Progress.bar импортировать IncrementalBar из импорта image_anaанализа * из импорта настроек * из импорта из архива * из импорта аннотации * из меню импорта * время импорта, сис класс ProgressionMechanics(QThread): Защиту __init__ (сам, поток, родитель = Нет): супер().__init__(родительский) self.flow = поток self.flag = Ложь Progress_signal = pyqtSignal (целое) защита запуска (сам): для я в диапазоне (1, 101): self.progress_signal.emit(i) время.сон(0.1) self.quit() self.flag = Истина self.flow.Anaанализ.load_succeful() само.поток.анализрезультат() время.сон(1) класс MainProcess(): защита __init__(сам): self.MainWindow = QMainWindow() self.main_window = МенюПроцесс() self.main_window.setupUi(self.MainWindow) self.main_window.retranslateUi(self.MainWindow) self.Dialog_1 = QDialog() self.Анализ = load_process() self.Anaанализ.setupUi(self.Dialog_1) self.Anaанализ.retranslateUi(self.Dialog_1) self.Dialog_1_5 = QDialog() self.View = анализ_процесс() self.View.setupUi(self.Dialog_1_5) self.View.retranslateUi(self.Dialog_1_5) self.Dialog_2 = QDialog() self.Archieve = archive_directory() self.Archieve.setupUi(self.Dialog_2) self.Archieve.retranslateUi(self.Dialog_2) self.Dialog_3 = QDialog() self.Annotation = annotation_window() self.Annotation.setupUi(self.Dialog_3) self.Annotation.retranslateUi(self.Dialog_3) self.Dialog_4 = QDialog() self.Settings = settings_window() self.Settings.setupUi(self.Dialog_4) self.Settings.retranslateUi(self.Dialog_4) self.main_window.pushButton.clicked.connect(self.openload) self.main_window.pushButton_2.clicked.connect(self.openarchieve) self.main_window.pushButton_3.clicked.connect(self.openannotation) self.main_window.pushButton_4.clicked.connect(self.opensettings) self.Archieve.pushButton_5.clicked.connect(self.closearchieve) self.Annotation.pushButton_5.clicked.connect(self.closeannotation) self.Settings.pushButton_6.clicked.connect(self.closesettings) self.Settings.pushButton_5.clicked.connect(self.closesettings) self.main_window.pushButton_5.clicked.connect(sys.exit) Защитный переход (сам, window_1, window_2): окно_1.закрыть() окно_2.шоу() защита openload(self): self.Anaанализ.open_directory() self.transition(self.MainWindow,self.Dialog_1) self.Anaанализ.workthread = ProgressionMechanics(self) self.Anaанализ.workthread.progress_signal.connect(self.Anaанализ.updateProgressBar) self.Anaанализ.workthread.start() Защитный результат анализа (сам): self.transition(self.Dialog_1,self.Dialog_1_5) self.View.workerThread = ProgressionMechanics(self) self.View.workerThread.start() def closeanasis(self): self.transition(self.Dialog_1, self.MainWindow) защита closeload(self): self.transition(self.Dialog_1,self.MainWindow) защита openarchieve(self): self.transition(self.MainWindow,self.Dialog_2) защита closearchieve(self): self.transition(self.Dialog_2,self.MainWindow) защита openannotation(self): self.transition(self.MainWindow,self.Dialog_3) защита closeannotation(self): self.transition(self.Dialog_3,self.MainWindow) защита opensettings (сам): self.transition(self.MainWindow,self.Dialog_4) защита closesettings(self): self.transition(self.Dialog_4,self.MainWindow) если __name__ == "__main__": приложение = QApplication(sys.argv) main_thread = ОсновнойПроцесс() main_thread.MainWindow.show() sys.exit(app.exec_())
введите здесь описание изображения
Как интегрировать индикатор выполнения в мой проект PyQt5, чтобы он мог отслеживать ход загрузки и анализа изображений. Как вариант я использую библиотеку QThread для работы с многопоточностью, но рассматриваю и другие варианты. Алгоритм следующий: 1. Нажатие кнопки 2. Откроется диалоговое окно и начнется загрузка (на данный момент оно просто заполняет индикатор выполнения до 100). 3.Откроется следующее окно – загрузка завершена. 4.Открывается последнее окно - результаты анализа.
Во время выполнения моей программы я смог нажать кнопку, чтобы открыть диалоговое окно, в котором отображается индикатор выполнения. После его заполнения программа просто закрывает все окна (это неправильно), включая окно меню, но работа программы не ставится на паузу. По словам программы, она должна закрывать не окно меню, а только окно с Прогресс-баром, и на его месте отображать диалоговое окно - «Загрузка успешна». Далее это окно следует закрыть через определенный промежуток времени, а на его месте должно появиться окно с результатами анализа.
Что касается всех этих функций вызова окон, я просто адаптирую функциональность метода «connect» объекта «Кнопка».
Если бы сюда в качестве аргумента можно было бы добавить функцию с существующим аргументом (открытием окна), я бы это сделал. Но вызывать можно только имена функций, поэтому нам приходится добавлять именованные функции.
По поводу импорта других окон, например настроек - для Qt Designer есть шаблон, то есть просто набор класса Ui Dialog с параметрами окна, поэтому я их сюда не добавлял
Ниже приведен мой код из основного файла. Если у вас есть еще предложения, буду очень признателен.
из импорта PyQt5.QtWidgets * из PyQt5.QtCore импортировать QThread, pyqtSignal из PyQt5 импортировать QtWidgets, QtCore, QtGui из Progress.bar импортировать IncrementalBar из импорта image_anaанализа * из импорта настроек * из импорта из архива * из импорта аннотации * из меню импорта * время импорта, сис класс ProgressionMechanics(QThread): Защиту __init__ (сам, поток, родитель = Нет): супер().__init__(родительский) self.flow = поток self.flag = Ложь Progress_signal = pyqtSignal (целое) защита запуска (сам): для я в диапазоне (1, 101): self.progress_signal.emit(i) время.сон(0.1) self.quit() self.flag = Истина self.flow.Anaанализ.load_succeful() само.поток.анализрезультат() время.сон(1) класс MainProcess(): защита __init__(сам): self.MainWindow = QMainWindow() self.main_window = МенюПроцесс() self.main_window.setupUi(self.MainWindow) self.main_window.retranslateUi(self.MainWindow) self.Dialog_1 = QDialog() self.Анализ = load_process() self.Anaанализ.setupUi(self.Dialog_1) self.Anaанализ.retranslateUi(self.Dialog_1) self.Dialog_1_5 = QDialog() self.View = анализ_процесс() self.View.setupUi(self.Dialog_1_5) self.View.retranslateUi(self.Dialog_1_5) self.Dialog_2 = QDialog() self.Archieve = archive_directory() self.Archieve.setupUi(self.Dialog_2) self.Archieve.retranslateUi(self.Dialog_2) self.Dialog_3 = QDialog() self.Annotation = annotation_window() self.Annotation.setupUi(self.Dialog_3) self.Annotation.retranslateUi(self.Dialog_3) self.Dialog_4 = QDialog() self.Settings = settings_window() self.Settings.setupUi(self.Dialog_4) self.Settings.retranslateUi(self.Dialog_4) self.main_window.pushButton.clicked.connect(self.openload) self.main_window.pushButton_2.clicked.connect(self.openarchieve) self.main_window.pushButton_3.clicked.connect(self.openannotation) self.main_window.pushButton_4.clicked.connect(self.opensettings) self.Archieve.pushButton_5.clicked.connect(self.closearchieve) self.Annotation.pushButton_5.clicked.connect(self.closeannotation) self.Settings.pushButton_6.clicked.connect(self.closesettings) self.Settings.pushButton_5.clicked.connect(self.closesettings) self.main_window.pushButton_5.clicked.connect(sys.exit) Защитный переход (сам, window_1, window_2): окно_1.закрыть() окно_2.шоу() защита openload(self): self.Anaанализ.open_directory() self.transition(self.MainWindow,self.Dialog_1) self.Anaанализ.workthread = ProgressionMechanics(self) self.Anaанализ.workthread.progress_signal.connect(self.Anaанализ.updateProgressBar) self.Anaанализ.workthread.start() Защитный результат анализа (сам): self.transition(self.Dialog_1,self.Dialog_1_5) self.View.workerThread = ProgressionMechanics(self) self.View.workerThread.start() def closeanasis(self): self.transition(self.Dialog_1, self.MainWindow) защита closeload(self): self.transition(self.Dialog_1,self.MainWindow) защита openarchieve(self): self.transition(self.MainWindow,self.Dialog_2) защита closearchieve(self): self.transition(self.Dialog_2,self.MainWindow) защита openannotation(self): self.transition(self.MainWindow,self.Dialog_3) защита closeannotation(self): self.transition(self.Dialog_3,self.MainWindow) защита opensettings (сам): self.transition(self.MainWindow,self.Dialog_4) защита closesettings(self): self.transition(self.Dialog_4,self.MainWindow) если __name__ == "__main__": приложение = QApplication(sys.argv) main_thread = ОсновнойПроцесс() main_thread.MainWindow.show() sys.exit(app.exec_())
Мобильная версия