Найти - Пользователи
Полная версия: PyQt: emit GUI-потоку из вспомогательного
Начало » Python для новичков » PyQt: emit GUI-потоку из вспомогательного
1
xtesterx
приветствую, никак не пойму в чём проблема, слот просто не отрабатывает (то есть, вообще даже не запускается, без каких-либо ошибок). Есть код:

class Base(QThread):
onStart = pyqtSignal()
onHalt = pyqtSignal(object)

def __init__(self, parent = None):
super(Base, self).__init__(parent)

def __del__(self):
if self.isRunning():
self.quit()
self.wait()

def run(self):
self.onStart.emit()

class Base2(Base):
def __init__(self, parent = None):
super(Base2, self).__init__(parent)
def run(self):
self.onStart.emit()

class Handler(QObject):
def __init__(self, parent = None):
super(Handler, self).__init__(parent)

@pyqtSlot()
def handleB(self):
print("HANDLER: Thread B is starting")

@pyqtSlot()
def handleB2(self):
print("HANDLER: Thread B2 is starting")

b = Base()
b2 = Base2()

h = Handler()

b.onStart.connect(h.handleB)
b2.onStart.connect(h.handleB2)

b.start()
b2.start()

sleep(10)
ожидается, что после запуска потоков, будет послан сигнал для onStart, которое отработает соотв. обработчик (и будет напечатано “HANDLER: Thread B is starting” / “HANDLER: Thread B2 is starting” соответственно), однако, этого не происходит.

Подскажите пожалуйста, что я делаю не так ?
xtesterx
мда, в общем забыл главный цикл обработки сообщений для GUI-шного потока запустить, то есть app.exit(app.exec_()) в конце.
Однако, тогда вообще не понятно, как работают сигналы, так как смутило следующее:
если emit-ить в одном потоке (например в главном), то сигналы отрабатывают и без явного запуска event-loop, то есть строка app.exit(app.exec_()) не нужна, если emit-ить просто из текущего потока… кто тогда занимается разбором событий? Видимо никто, значит тогда я не понимаю как работают сигналы вообще, так как для одного случая обработка событий нужна (emit из другого потока), в другом - нет (emit из текущего потока).
Возможно, в сигналах Qt есть какая-то своя внутренняя механика на этот случай, вот интересно было бы найти подробное описание, как вообще работают event-loop в Qt вместе с другими объектами (например, я хочу создать свой собственный цикл обработки и отправки сообщений для некоторой группы потоков, к примеру - QTimer в дополнительных потоках и т.д. - как это делается ?)
This is a "lo-fi" version of our main content. To view the full version with more information, formatting and images, please click here.
Powered by DjangoBB