блокирующих сигналов для достижения QObjects довольно просто с использованием QSignalBlocker Class
например
# 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
как я могу заблокировать def printsomething(self):
из печати без использования disconnect
при подключении к сигналу clicked
?
пример кода
"""
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_())