使用QSignalBlocker Class
阻塞信号以到达QoObject相当简单
像
# 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):
打印
def blockprint(self):
self.printsomething.blockSignals(True)
将给出一个AttributeError: 'function' object has no attribute 'blockSignals'
看起来这个方法只适用于QObjects
当clicked
连接到clicked
信号时,如何在不使用disconnect
的情况下阻止def printsomething(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继承的对象的信号
作为一个解决方案,您可以
这样做
这将阻止主窗口信号,直到您再次将blockSignals标志设置为false
相关问题 更多 >
编程相关推荐