Python PyQt4信号不发射
我尝试构建一个udp服务器来接收二进制消息,套接字在接收到消息时发出processMsg信号,processMsg函数尝试根据消息类型发出不同的信号。QDefines对象定义要生成的消息类型和信号。我使用dict来解决python中缺少的开关/大小写。问题是当接收到UCSI_SET_RF_RSP_E消息时,setRfRsp函数没有执行 Main.py文件:Python PyQt4信号不发射,python,qt,Python,Qt,我尝试构建一个udp服务器来接收二进制消息,套接字在接收到消息时发出processMsg信号,processMsg函数尝试根据消息类型发出不同的信号。QDefines对象定义要生成的消息类型和信号。我使用dict来解决python中缺少的开关/大小写。问题是当接收到UCSI_SET_RF_RSP_E消息时,setRfRsp函数没有执行 Main.py文件: class mainWindow(QtGui.QMainWindow): def __init__(self, parent = None)
class mainWindow(QtGui.QMainWindow):
def __init__(self, parent = None):
super(mainWindow, self).__init__()
self.ui = Ui_MainWindow()
self.defines = QDefines()
self.connect(self.defines,QtCore.SIGNAL("signalSetRfRsp(PyQt_PyObject)"), self.setRfRsp)
self.socket = QUdp(self.localIp, self.localPort, self.remoteIp, self.remotePort)
self.connect(self.socket, QtCore.SIGNAL("processMsg(int,PyQt_PyObject)"), self.processMsg)
def setRfRsp(self, msg):
if msg == 0x00000000:
print "open"
else:
print "closed"
def processMsg(self, msgType, msg):
defines = QDefines()
msg_dict = defines.msgDictGen();
msg_dict[msgType](msg)
定义.py文件:
class QDefines(QtCore.QObject):
UCSI_SET_RF_RSP_E = 0x000d
def __init__(self, parent = None):
super(QDefines, self).__init__()
def UCSI_SET_RF_RSP(self, msg):
self.emit(QtCore.SIGNAL("signalSetRfRsp(PyQt_PyObject)"), msg)
def msgDictGen(self):
self.msgDict = {
self.UCSI_SET_RF_RSP_E : self.UCSI_SET_RF_RSP
}
return self.msgDict
发出信号的
QDefines
实例从未将其任何信号连接到任何东西,它只是在processMsg
返回时收集垃圾
也许你想写:
def processMsg(self, msgType, msg):
msg_dict = self.defines.msgDictGen()
msg_dict[msgType](msg)
你也应该考虑去掉那个讨厌的、老式的信号语法,用漂亮、干净的代替:
另外,我建议您不要尝试在python中复制
switch
语句,而只使用if/elif
。在这成为一个重要的性能问题之前,您需要大量的分支。就是这样。我意外地重新创建了该实例两次。谢谢你的提示!我会开始习惯新的风格:)
class QDefines(QtCore.QObject):
signalSetRfRsp = QtCore.pyqtSignal(object)
...
def UCSI_SET_RF_RSP(self, msg):
self.signalSetRfRsp.emit(msg)
class mainWindow(QtGui.QMainWindow):
def __init__(self, parent = None):
...
self.defines = QDefines()
self.defines.signalSetRfRsp.connect(self.setRfRsp)