Форум сайта python.su
0
приветствую, никак не пойму в чём проблема, слот просто не отрабатывает (то есть, вообще даже не запускается, без каких-либо ошибок). Есть код:
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)
Офлайн
0
мда, в общем забыл главный цикл обработки сообщений для GUI-шного потока запустить, то есть app.exit(app.exec_()) в конце.
Однако, тогда вообще не понятно, как работают сигналы, так как смутило следующее:
если emit-ить в одном потоке (например в главном), то сигналы отрабатывают и без явного запуска event-loop, то есть строка app.exit(app.exec_()) не нужна, если emit-ить просто из текущего потока… кто тогда занимается разбором событий? Видимо никто, значит тогда я не понимаю как работают сигналы вообще, так как для одного случая обработка событий нужна (emit из другого потока), в другом - нет (emit из текущего потока).
Возможно, в сигналах Qt есть какая-то своя внутренняя механика на этот случай, вот интересно было бы найти подробное описание, как вообще работают event-loop в Qt вместе с другими объектами (например, я хочу создать свой собственный цикл обработки и отправки сообщений для некоторой группы потоков, к примеру - QTimer в дополнительных потоках и т.д. - как это делается ?)
Офлайн