#python #pyqt5 #signals
#python #pyqt5 #сигналы
Вопрос:
используя PyQt5 в качестве интерфейса для моей программы, я написал функцию, которая активируется нажатием кнопки, и эта функция активирует (среди прочего) другую функцию, которая активирует поток, который работает над чем-то другим, пока первая функция выполняет свою работу. Моя проблема в том, что функция завершается намного быстрее, чем поток, и я хочу, чтобы программа дождалась завершения потока, прежде чем двигаться дальше, предпочтительно с опцией тайм-аута. Я знаю, что в PyQt5 есть сигналы, и я знаю, как запускать события на основе заданного сигнала, однако, как бы мне заставить программу ждать поступления сигнала?
Большое вам спасибо за помощь 🙂
пример кода того, что я хочу:
class MyClass():
def __init__():
self.first_function()
....
....
def first_function(self):
....
....
self.second_function()
wait_for_signal(timeout=30)
def second_function(self):
....
t = threading.Thread(target=self.thread_func)
t.start()
....
....
def thread_func(self):
....
....
signal.emit()
Ответ №1:
Я не знаю точно, что вам нужно, но вот пример функции, которая в начале блокирует сигналы и в конце активирует их
def show_acte_general(self):
self.comboBox_2.blockSignals(True)
self.comboBox_2.clear()
self.comboBox_4.blockSignals(True)
self.comboBox_4.clear()
self.connection = psycopg2.connect(user="postgres", password="password", host="localhost", database="database")
self.cur = self.connection.cursor()
self.cur.execute('''SELECT items FROM read ORDER BY items ASC;''')
data = self.cur.fetchall()
for actes in data :
self.comboBox_2.addItem(actes[0])
self.comboBox_2.blockSignals(False)
self.comboBox_4.addItem(actes[0])
self.comboBox_4.blockSignals(False)