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

2024-10-01 07:28:55 发布

您现在位置:Python中文网/ 问答频道 /正文

使用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_())


Tags: fromimportselftruedefconnectsyspyqt5
1条回答
网友
1楼 · 发布于 2024-10-01 07:28:55

你要做的是堵住一个不可能的缝隙。 只能阻止从QObject继承的对象的信号

作为一个解决方案,您可以

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

这样做

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

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

相关问题 更多 >