Multithreading 不能';t将事件从PyQt 4.6.3中的主线程发布到QThread
我试图用PyQt 4.6.3从主线程向独立线程发送信号。但似乎无法从主线程发布事件,并且什么也没有发生。 下面是我的代码,它演示了这个问题Multithreading 不能';t将事件从PyQt 4.6.3中的主线程发布到QThread,multithreading,pyqt,qthread,Multithreading,Pyqt,Qthread,我试图用PyQt 4.6.3从主线程向独立线程发送信号。但似乎无法从主线程发布事件,并且什么也没有发生。 下面是我的代码,它演示了这个问题 #!/usr/bin/env python # -*- coding: utf-8 -*- # Unexpected behavior of QThread event loop import sys from PyQt4 import QtCore, QtGui class MyObject(QtCore.QObject): answer
#!/usr/bin/env python
# -*- coding: utf-8 -*-
# Unexpected behavior of QThread event loop
import sys
from PyQt4 import QtCore, QtGui
class MyObject(QtCore.QObject):
answer = QtCore.pyqtSignal()
@QtCore.pyqtSlot()
def onRequest(self):
print 'ping'
self.answer.emit()
class MyButton(QtGui.QPushButton):
answer = QtCore.pyqtSignal()
@QtCore.pyqtSlot()
def onRequest(self):
print 'pong'
# self.clicked.emit(True) # works fine in Qt 4.6.3
self.answer.emit() # doesn't work in Qt 4.6.3
def main():
a = QtGui.QApplication(sys.argv)
t = QtCore.QThread()
t.start()
obj = MyObject()
button = MyButton()
button.show()
button.clicked.connect(obj.onRequest)
button.answer.connect(obj.onRequest)
obj.answer.connect(button.onRequest)
obj.moveToThread(t)
sys.exit(a.exec_())
if __name__ == '__main__':
main()
我期待无限的“ping”和“pong”消息,但我只看到一个“ping”-“pong”消息对
我还尝试编写代码,将事件发布到位于单独线程中的QObject(QCoreApplication.postEvent(myObjlivingThread,myCustomEvent)
),但该代码也不起作用
我还尝试在PyQt4.8.3上运行这段代码,效果很好
是虫子吗?我的代码正确吗
另外,抱歉,真实版本:
- PyQt 4.7
- Qt 4.4.2
- python 2.4.3
- sip 4.10