首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何临时断开pyqt QSignalMapper

如何临时断开pyqt QSignalMapper
EN

Stack Overflow用户
提问于 2019-01-11 23:35:40
回答 1查看 373关注 0票数 2

我有一个QSignalMapper,在某个时候我需要将这个QSignalMapper断开到一个插槽,然后再重新连接。做这件事的正确方法是什么?

或者有任何方法让我可以检查一个QSignalMapper是否连接到任何一个插槽?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2019-01-12 00:00:48

与连接和断开插槽不同,一个简单的解决方案是使用blockSignals()方法阻止信号的发射。

代码语言:javascript
复制
from PyQt5 import QtCore, QtWidgets


class Widget(QtWidgets.QWidget):
    def __init__(self, parent=None):
        super(Widget, self).__init__(parent)

        self._mapper = QtCore.QSignalMapper(self)
        vlay = QtWidgets.QVBoxLayout(self)
        checkbox = QtWidgets.QCheckBox("Block Signals")
        checkbox.stateChanged.connect(self.onStateChanged)
        vlay.addWidget(checkbox)
        for i in range(5):
            button = QtWidgets.QPushButton("{}".format(i))
            button.clicked.connect(self._mapper.map)
            self._mapper.setMapping(button, "button-{}".format(i))
            vlay.addWidget(button)
        self._mapper.mapped[str].connect(self.onClicked)

    @QtCore.pyqtSlot(int)
    def onStateChanged(self, state):
        self._mapper.blockSignals(state == QtCore.Qt.Checked)

    @QtCore.pyqtSlot(str)
    def onClicked(self, text):
        print(text)

if __name__ == '__main__':
    import sys
    app = QtWidgets.QApplication(sys.argv)
    w = Widget()
    w.show()
    sys.exit(app.exec_())

另一方面,QT5.10中不推荐使用QSignalMapper,因此将来将消除它。

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

https://stackoverflow.com/questions/54155407

复制
相关文章

相似问题

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