首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >PyQt4信号不发出

PyQt4信号不发出
EN

Stack Overflow用户
提问于 2014-09-17 07:21:57
回答 1查看 99关注 0票数 0

我尝试构建一个udp服务器来接收二进制消息,套接字在接收消息时发出processMsg信号,processMsg函数试图根据消息类型发出不同的信号。QDefines对象定义要生成的消息类型和信号。我使用dict来解决python中缺少的开关/情况。问题是当setRfRsp消息重新出现时,UCSI_SET_RF_RSP_E函数没有执行。

Main.py文件:

代码语言:javascript
复制
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)

defines.py文件:

代码语言:javascript
复制
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
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2014-09-18 00:33:23

发出信号的QDefines实例从未将其任何信号连接到任何东西,当processMsg返回时,它只会被垃圾收集。

也许你是想写:

代码语言:javascript
复制
    def processMsg(self, msgType, msg):
        msg_dict = self.defines.msgDictGen()
        msg_dict[msgType](msg)

您还应该考虑去掉那种讨厌的、老式的信号语法,转而使用漂亮、干净的新风格

代码语言:javascript
复制
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)

另外,我建议您忘记尝试在python中复制switch语句,而只是使用if/elif。在这开始成为一个重要的性能问题之前,您需要非常多的分支。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/25884634

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档