gpt4 book ai didi

python - 如何临时断开 pyqt QSignalMapper

转载 作者:太空宇宙 更新时间:2023-11-04 04:22:40 25 4
gpt4 key购买 nike

我有一个QSignalMapper,在某些时候我需要断开这个QSignalMapper到一个插槽,之后,我再次重新连接。执行此操作的正确方法是什么?

或者有什么方法可以检查 QSignalMapper 是否连接到任何插槽?

最佳答案

一种简单的解决方案是使用 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 中弃用,因此将来会被淘汰。

关于python - 如何临时断开 pyqt QSignalMapper,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54155407/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com