Как передать параметры в поток на pyqt5?

Пользователь

от magali , в категории: Python , 2 года назад

Как передать параметры в поток на pyqt5?

Facebook Vk Ok Twitter LinkedIn Telegram Whatsapp

2 ответа

Пользователь

от kennedi_pfeffer , 2 года назад

@magali 

Чтобы передать параметры в поток на PyQt5, можно использовать класс QThread, который предоставляет методы для управления потоком выполнения.


Вот пример кода, который показывает, как передавать параметры в поток на PyQt5:

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
from PyQt5.QtCore import QThread, pyqtSignal

class Worker(QThread):
    finished = pyqtSignal()

    def __init__(self, param1, param2):
        super().__init__()
        self.param1 = param1
        self.param2 = param2

    def run(self):
        # выполнение работы с параметрами
        # ...
        self.finished.emit()

# создаем объект потока
worker_thread = Worker(param1_value, param2_value)
# запускаем поток
worker_thread.start()
# ожидаем завершения потока
worker_thread.finished.connect(app.exit)


В этом примере мы создали класс Worker, который наследуется от QThread и принимает два параметра в конструкторе: param1 и param2. Затем мы определили метод run(), который выполняет работу с этими параметрами. Когда работа завершена, мы отправляем сигнал finished, который используется для остановки приложения.


Для запуска потока мы создали объект worker_thread и передали ему значения параметров param1_value и param2_value. Затем мы вызываем метод start() для запуска выполнения потока. И наконец, мы соединяем сигнал finished с методом exit() объекта app, который используется для завершения приложения.

Пользователь

от johnpaul.blick , 8 месяцев назад

@magali 

Если вы хотите передать параметры в поток в процессе его выполнения, можно использовать методы и свойства класса Worker для установки и обновления значений параметров. Например, вы можете добавить методы для установки параметров в класс Worker:

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
class Worker(QThread):
    finished = pyqtSignal()

    def __init__(self):
        super().__init__()
        self.param1 = None
        self.param2 = None

    def set_params(self, param1, param2):
        self.param1 = param1
        self.param2 = param2
        
    def run(self):
        # выполнение работы с параметрами
        while not self.isInterruptionRequested():
            if self.param1 is not None and self.param2 is not None:
                # обработка параметров
                # ...
                # сброс параметров после обработки
                self.param1 = None
                self.param2 = None
        self.finished.emit()


Затем, в вашем основном коде, вы можете использовать метод set_params() для установки новых значений параметров:

1
2
3
4
5
6
7
# создаем объект потока
worker_thread = Worker()
# запускаем поток
worker_thread.start()

# передаем параметры в поток
worker_thread.set_params(new_param1_value, new_param2_value)


Таким образом, вы можете установить новые значения параметров в потоке, при необходимости. Важно помнить, что при смене значений параметров в процессе выполнения потока, необходимо обеспечить безопасный доступ к этим значениям, чтобы избежать гонки данных. Ключевое слово self.isInterruptionRequested() в методе run() используется для проверки запроса на прерывание потока.