Как организовать приложение pyqt с многопоточностью и множеством окон? [закрыто]Python

Программы на Python
Ответить Пред. темаСлед. тема
Anonymous
 Как организовать приложение pyqt с многопоточностью и множеством окон? [закрыто]

Сообщение Anonymous »

Обычно я организую такие приложения, создавая основной класс, который наследуется от 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
Реклама
Ответить Пред. темаСлед. тема

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

  • Похожие темы
    Ответы
    Просмотры
    Последнее сообщение

Вернуться в «Python»