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)