不能同时使用 PyQt5 和 Eventlet

问题描述

我想在 Windows 上用 Python 创建一个 SocketIO 服务器,作为我正在编写的 SocketIO 客户端的模拟器。服务器使用 eventlet 侦听本地端口 0.0.0.0。模拟器使用 PyQt5,有两个按钮。一个按钮从服务器发出一条消息,另一个按钮从服务器发出不同的消息。

执行后,客户端连接到服务器没有问题,但 QDialog 挂起且 QPushButtons 不显示

如果我注释掉以 eventlet = 开头的行,则 QDialog 显示没有问题,但 [显然] 客户端无法连接到服务器。

有什么建议可以解决这个问题,以便我可以从客户端连接并通过单击 QPushButtons 发出服务器消息?这是我的服务器脚本:

from PyQt5.QtWidgets import QPushButton,QDialog,QApplication 
import socketio,sys,eventlet

class My_Server(QDialog):

    def __init__(self,parent=None):
        super(My_Server,self).__init__(parent)
        
        self.setwindowTitle("My SocketIO Server")
        self.resize(300,150)
        self.move(300,200)
        
        self.btn1 = QPushButton(self)
        self.btn1.setText('Msg 1')
        self.btn1.move(50,75)
        self.btn1.clicked.connect(self.send_btn1)
        
        self.btn2 = QPushButton(self)
        self.btn2.setText('Msg 2')   
        self.btn2.move(175,75)
        self.btn2.clicked.connect(self.send_btn2)
        
        self.show()
        
        self.sio = socketio.Server()
        self.serverapp = socketio.WsgiApp(self.sio,static_files={'/': {'content_type': 'text/html','filename': 'index.html'}})
        eventlet.wsgi.server(eventlet.listen(('',5000)),self.serverapp)
        
    def send_btn1(self):
        self.sio.emit('message1',{"Message 1": "Hello"})
        
    def send_btn2(self):
        self.sio.emit('message2',{"Message 2": "World"})

if __name__ == '__main__':
    app = QApplication(sys.argv)
    form = My_Server()
    form.show()
    sys.exit(app.exec_())

解决方法

暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!

如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。

小编邮箱:dio#foxmail.com (将#修改为@)