繁体   English   中英

如何阻止信号到达自定义插槽

[英]how to block signals reaching to custom slots

使用QSignalBlocker Class阻止信号到达 QObjects 相当简单

喜欢

  # functionality
        self.clickbuton.clicked.connect(self.printsomething)
        self.clickbuton.clicked.connect(self.blockprint)

    def printsomething(self):
        print("dude")

    def blockprint(self):
        self.clickbuton.blockSignals(True)

def printsomething(self):这样的自定义插槽呢?

尝试相同的操作但阻止def printsomething(self): from printing

 def blockprint(self):
        self.printsomething.blockSignals(True)

将给出AttributeError: 'function' object has no attribute 'blockSignals'

看起来这个方法只适用于QObjects
如何阻止def printsomething(self):在连接到clicked信号时不使用disconnect连接进行打印?


代码示例

"""
Testing Template for throw away experiment

"""


import sys
import os

from PyQt5 import QtWidgets as qtw
from PyQt5 import QtCore as qtc
from PyQt5 import QtGui as qtg




class MainWindow(qtw.QWidget):
    def __init__(self):
        super().__init__()

        # widget
        self.clickbuton = qtw.QPushButton("click me")

        # set the layout
        layout = qtw.QVBoxLayout()
        layout.addWidget(self.clickbuton)
        self.setLayout(layout)

        # functionality
        self.clickbuton.clicked.connect(self.printsomething)
        self.clickbuton.clicked.connect(self.blockprint)

    def printsomething(self):
        print("dude")

    def blockprint(self):
        self.printsomething.blockSignals(True)
        # self.m_blocker = qtc.QSignalBlocker(self.clickbuton)




if __name__ == '__main__':
    app = qtw.QApplication(sys.argv)

    main = MainWindow()
    main.show()

    sys.exit(app.exec_())

您要做的是阻止一个不可能的插槽。 您只能阻止从 QObject 继承的对象的信号。

作为一种解决方案,您可以代替

def blockprint(self):
        self.printsomething.blockSignals(True)

做这个

def blockprint(self):
        self.blockSignals(True)

这将阻止主窗口信号,直到您再次将 blockSignals 标志设置为 false。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM