Как временно отключить pyqt QSignalMapper - PullRequest
0 голосов
/ 12 января 2019

У меня есть QSignalMapper, и в какой-то момент мне нужно отключить этот QSignalMapper в слот, и после этого я снова подключаюсь. Как правильно это сделать?

Или есть какой-нибудь способ проверить, подключен ли QSignalMapper к любому слоту?

1 Ответ

0 голосов
/ 12 января 2019

Вместо того, чтобы подключать и отключать слот, одним простым решением является блокирование передачи сигнала с помощью метода blockSignals () .

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_())

С другой стороны, QSignalMapper устарел с Qt 5.10, поэтому в будущем он будет исключен.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...