python - 通过 QtCore.SignalMapper 调用槽

标签 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)
    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)

我的代码有什么问题吗?感谢您的帮助

最佳答案

您的代码的主要问题是,您使用的是丑陋的、容易出错的旧式语法来连接信号,而不是 new-style syntax .

这是示例代码的重写:

    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)

如果您好奇为什么原始代码不起作用,那是因为您应该在前两个连接中使用 SLOT。本来应该是:

    QtCore.QObject.connect(
        self.lineEdit_331, QtCore.SIGNAL('returnPressed()'),
        self.signalMapper, QtCore.SLOT('map()'))

这是因为 QSignalMapper.map 有两次重载,因此您需要指定您打算使用哪一个。

关于python - 通过 QtCore.SignalMapper 调用槽,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22613409/

相关文章:

python - 如何根据数据获得具有可变颜色和网格的 pyqtgraph 绘图小部件?

python - 是否有用于 Microsoft SQL Server 地理/几何类型的 SQLAlchemy UserDefinedType 示例?

python - 气泡图/图表的尺寸图例

python - 如何在PyQt5中连接QFileSystemModel dataChanged信号?

Python 在非常大的输出中打印 "..."

python - 跟踪快速更新的文件时程序崩溃

python - PyQt ComboBox 小部件在空时不发出信号

python - PyQt 中的 StandardContextMenu 国际化

c++ - windows下连接信号槽,linux下不连接

python - 按钮的单按钮事件处理程序