Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/336.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
python socketserver如何将变量传递到外部_Python_Pyqt5_Socketserver - Fatal编程技术网

python socketserver如何将变量传递到外部

python socketserver如何将变量传递到外部,python,pyqt5,socketserver,Python,Pyqt5,Socketserver,我正在使用socketserver和pyqt5创建一个udpserver,如下所示: class UdpServer(socketserver.BaseRequestHandler): signal_msg=pyqtSignal(str) def handle(self): data =self.request[0] signal_msg.emit(data.decode('utf-8')) udpserver=socketserver.Thre

我正在使用socketserver和pyqt5创建一个udpserver,如下所示:

class UdpServer(socketserver.BaseRequestHandler):
    signal_msg=pyqtSignal(str)
    def handle(self):
        data =self.request[0]
        signal_msg.emit(data.decode('utf-8'))
udpserver=socketserver.ThreadingUDPServer(('127.0.0.1',8081),UdpServer)
def udpthr(): 
    udpserver.serve_forever()
threading.Thread(target=udpthr,args=()).start()
然后我使用QT按钮启动这个类,如下所示:

class UdpServer(socketserver.BaseRequestHandler):
    signal_msg=pyqtSignal(str)
    def handle(self):
        data =self.request[0]
        signal_msg.emit(data.decode('utf-8'))
udpserver=socketserver.ThreadingUDPServer(('127.0.0.1',8081),UdpServer)
def udpthr(): 
    udpserver.serve_forever()
threading.Thread(target=udpthr,args=()).start()

问题是,如何在pyqt5中使用“signal_msg”?由于UdpServer没有实例,我无法访问类中的变量。

信号仅在QObject中有意义,因为它们用于获取有关要传输的信息类型的信息,并实现所有内部逻辑。考虑到这一点,您必须创建一个QObject,其信号具有您发送的信息的签名,然后将该对象作为服务器的属性传递,以便在handle方法中使用它

导入系统 导入socketserver 导入线程 从PyQt5导入QtCore、QtGui、QtWidgets 类BridgeQtCore.QObject: dataChanged=QtCore.pyqtSignalstr 类UDPHandlersocketserver.BaseRequestHandler: def handleself: 数据=strself.request[0],ascii self.server.bridge.dataChanged.emitdata 类MainWindowQtWidgets.QMainWindow: def u_init__self,父项=无: 超级。初始父级 self.label=qtwidts.QLabelalignment=QtCore.Qt.AlignCenter self.label.setFontQtGui.QFontArial,20 self.setCentralWidgetself.label self.resize640480 @QtCore.pyqtSlotstr def更新_textself,文本: self.label.setTexttext def主: app=qtwidts.QApplicationsys.argv 桥 w=主窗口 w、 展示 主机,端口=127.0.0.18081 server=socketserver.ThreadingUDPServerHOST,端口,UDPHandler ip,端口=server.server\u地址 打印IP,端口 server.bridge=bridge bridge.dataChanged.connectw.update\u text server\u thread=threading.Threadtarget=server.service\u server_thread.daemon=True server\u thread.start ret=app.exec_ server.server\u关闭 系统出口 如果uuuu name uuuuu==\uuuuuuuu main\uuuuuuuu: 主要的
你的代码有什么问题?使信号成为全局信号不仅毫无意义,因为信号只作为实例属性工作,而且是一件非常糟糕的事情。天哪,完美地解决了我的问题,非常感谢@回林洲请阅读并复习答案,这样你就知道当答案解决你的问题时该怎么做