Обычно я организую такие приложения, создавая основной класс, который наследуется от gui.py (созданного из файла .ui). Этот класс обрабатывает всю логику окна, и как только пользователь вводит все данные и нажимает кнопку, я начинаю их обработку в отдельном потоке, используя унаследованный от QThread класс.
Большую часть времени это выглядит так:
Код: Выделить всё
class MyThread(QThread):
result = pyqtSignal(str)
error = pyqtSignal(str)
def __init__(self, task, parent=None):
super().__init__(parent)
self.task = task
def run(self):
try:
self.task.lunch()
self.result.emit("Task processed")
except Exception as e:
self.error.emit(f"Error: {e}")
Эта структура отлично работает для приложений, в которых нужно управлять всего несколькими кнопками. Но когда их число растет, метод «запуска» моего рабочего потока превращается в один большой беспорядок, когда я пытаюсь объединить все разные задачи в одном методе. Только этот метод может работать в отдельном потоке, что меня ограничивает. Иногда мне также нужно получить некоторые данные из такой задачи, отправить их в основной поток, чтобы отобразить их пользователю через какое-то диалоговое окно и получить ответ для продолжения обработки, что еще больше ухудшает мой рабочий поток.
Как должна быть организована такая ситуация? Я думал о создании одного класса QThread для каждой задачи, но количество сигналов и слотов быстро стало слишком большим, чтобы им можно было управлять.
Подробнее здесь:
https://stackoverflow.com/questions/792 ... ny-windows