Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/blackberry/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 如何阻止信号到达自定义插槽_Python_Pyqt_Signals Slots - Fatal编程技术网

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

Python 如何阻止信号到达自定义插槽,python,pyqt,signals-slots,Python,Pyqt,Signals Slots,使用QSignalBlocker类 像 像def printsomething(self):这样的自定义插槽怎么样 尝试相同的操作,但阻止打印内容(self): def blockprint(self): self.printsomething.blockSignals(True) 将给出一个AttributeError:“function”对象没有属性“blockSignals” 看起来此方法仅适用于QObjects 当连接到单击的信号时,如何在不使用断开的情况下阻止de

使用
QSignalBlocker类

def printsomething(self):
这样的自定义插槽怎么样

尝试相同的操作,但阻止打印内容(self):

 def blockprint(self):
        self.printsomething.blockSignals(True)
将给出一个
AttributeError:“function”对象没有属性“blockSignals”

看起来此方法仅适用于
QObjects

当连接到单击的
信号时,如何在不使用
断开
的情况下阻止
def print something(self):
打印


代码示例

"""
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。

@eyllanesc补充道:如果您能解释您希望得到什么,您的解释不是很清楚。注意:QSignalBlocker会阻止对象发出信号,我想您有XY问题,您可以提供您想要获得的行为的更多详细信息。@eyllanesc当它连接到按钮点击信号时,我如何阻止
def print something(self):
打印而不使用
disconnect
,您指示我确认您有XY问题,如果不想使用disconnect,则使用标志,类似于:
self.\u flag=True
on
\uuu init\uuu
def printsomething(self):
如果self.\u flag:
\foo code
def blockprint(self):
        self.blockSignals(True)