<p>谢谢你的意见。你的回答帮助我找到了解决问题的办法。在搜索了如何发出Qevent之后,我找到了下面的示例<a href="https://wiki.python.org/moin/PyQt/Writing%20a%20client%20for%20a%20zeromq%20service" rel="nofollow noreferrer">example</a>并解决了问题。
最终代码如下:</p>
<pre><code>import pyforms
from pyforms import BaseWidget
from pyforms.controls import ControlTextArea
from pyforms.controls import ControlButton
import threading
import zmq
from PyQt5 import QtCore
class ZeroMQ_Listener(QtCore.QObject):
message = QtCore.pyqtSignal(str)
def __init__(self):
QtCore.QObject.__init__(self)
# Socket to talk to server
context = zmq.Context()
self.socket = context.socket(zmq.PULL)
self.socket.connect('tcp://127.0.0.1:5014')
print('connected!')
self.running = True
def loop(self):
while self.running:
string = self.socket.recv_string()
self.message.emit(string)
class SimpleExample1(BaseWidget):
def __init__(self):
super(SimpleExample1,self).__init__('Simple example 1')
#Definition of the forms fields
self._controltextarea = ControlTextArea('textarea to show incoming zmq messages')
self._button = ControlButton('Press this button')
message = QtCore.pyqtSignal(str)
self.thread = QtCore.QThread()
self.zeromq_listener = ZeroMQ_Listener()
self.zeromq_listener.moveToThread(self.thread)
self.thread.started.connect(self.zeromq_listener.loop)
self.zeromq_listener.message.connect(self.signal_received)
QtCore.QTimer.singleShot(0, self.thread.start)
def signal_received(self, message):
self._controltextarea.__add__(message)
#Execute the application
if __name__ == "__main__":
guiThread = threading.Thread(target=pyforms.start_app( SimpleExample1 ))
guiThread.start()
</code></pre>
<p>非常感谢并致以最诚挚的问候!!!在</p>