Python 通过QtCore.SignalMapper调用插槽
我想用不同的参数检查同一个函数在几个QtGui.QLineEdits中输入的用户。我试过QtCore.SignalMapper。这是我在测试应用程序中的代码:Python 通过QtCore.SignalMapper调用插槽,python,pyqt4,signals-slots,Python,Pyqt4,Signals Slots,我想用不同的参数检查同一个函数在几个QtGui.QLineEdits中输入的用户。我试过QtCore.SignalMapper。这是我在测试应用程序中的代码: self.signalMapper = QtCore.QSignalMapper(self) QtCore.QObject.connect(self.lineEdit_331, QtCore.SIGNAL(_fromUtf8('returnPressed()')), self.signalMapper.map) Q
self.signalMapper = QtCore.QSignalMapper(self)
QtCore.QObject.connect(self.lineEdit_331, QtCore.SIGNAL(_fromUtf8('returnPressed()')), self.signalMapper.map)
QtCore.QObject.connect(self.lineEdit_341, QtCore.SIGNAL(_fromUtf8("returnPressed()")), self.signalMapper.map)
self.signalMapper.setMapping(self.lineEdit_331,'links')
self.signalMapper.setMapping(self.lineEdit_341,'rechts')
QtCore.QObject.connect(self.signalMapper, QtCore.SIGNAL(_fromUtf8("mapped(QString)")),self.test)
signalMapper存在,并且所有连接都返回“True”,但未调用插槽(更改“connect”和“setMapping”的顺序后相同)。
将lineEdits信号连接到插槽工作:
QtCore.QObject.connect(self.lineEdit_331, QtCore.SIGNAL(_fromUtf8("returnPressed()")), self.test_1)
我的代码出了什么问题?感谢您的帮助您的代码的主要错误在于,您在连接信号时使用了丑陋、容易出错的老式语法,而不是传统的语法 下面是您的示例代码的重写:
self.signalMapper = QtCore.QSignalMapper(self)
self.lineEdit_331.returnPressed.connect(self.signalMapper.map)
self.lineEdit_331.returnPressed.connect(self.signalMapper.map)
self.signalMapper.setMapping(self.lineEdit_331, 'links')
self.signalMapper.setMapping(self.lineEdit_341, 'rechts')
self.signalMapper.mapped[str].connect(self.test)
如果您想知道为什么原始代码不起作用,那是因为您应该在前两个连接中使用插槽。应该是:
QtCore.QObject.connect(
self.lineEdit_331, QtCore.SIGNAL('returnPressed()'),
self.signalMapper, QtCore.SLOT('map()'))
这是因为有两个重载,因此您需要指定要使用哪一个重载。您重新编写的新样式语法可以工作,感谢您的提示,按照您所述完成的旧样式语法无法工作。在使用旧式语法之前,我尝试了新的语法,但没有成功。您提供了解释:我忘记了最后一行中的“[str]”。@user3455890。好奇。我测试了你问题中的确切代码,使用SLOT是唯一能帮我解决这个问题的方法。但这可能取决于pyqt/sip的版本,或者其他什么……我想,这是最后一次连接中的Qstring,请看这里:。我将“Try/Except”添加到我的测试应用程序中,它可以正常工作。因此,最重要的提示是您的“[str]”,感谢您的支持,从现在起,我将使用新型语法:-)