Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/281.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 通过QtCore.SignalMapper调用插槽_Python_Pyqt4_Signals Slots - Fatal编程技术网

Python 通过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

我想用不同的参数检查同一个函数在几个QtGui.QLineEdits中输入的用户。我试过QtCore.SignalMapper。这是我在测试应用程序中的代码:

    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]”,感谢您的支持,从现在起,我将使用新型语法:-)