我试图创建一个信号和插槽之间的简单连接,但发现自己卡住试图调用一个额外的功能。有2个选项我来了。这是调用我的类的代码。PyQt5记录信号
(选项1):
self.flip = MyClass("Flip Image")
self.flip.clicked.connect(self.do_flip)
的QWidget
,然后通过我的课,其主要目的是记录所做的信号实例化。这是我相信我的类应该实现:
class MyClass(QPushButton):
def __init__(self, name: str) -> None:
super().__init__(name)
self._name = name
def mousePressEvent(self, *args, **kwargs):
self.log_info()
def log_info(self):
log(self._name)
我不明白的是,为什么do_flip
插槽不会被调用?这是没有意义的我,所以我反而试图通过
(选项2)覆盖的点击信号:
class MyClass(QPushButton):
def __init__(self, name: str) -> None:
super().__init__(name)
self._name = name
def clicked(self, *args, **kwargs):
self.log_info()
#add connect() here?
def log_info(self):
log(self._name)
但有了这个代码,我得到一个友好AttributeError: 'function' object has no attribute 'connect'
。我在clicked
方法以及它如何调用连接时找不到任何文档。有没有办法让我点击插槽的连接或我必须创建自己的信号?我发现当尝试覆盖发出特定值的其他信号时,这将变得非常有用。
如果是这样,这导致我:
最后一招 - 我自己的信号
类将被称为像这样:
self.flip = MyClass("Flip Image")
self.flip.mysig.connect(self.do_flip)
而实现这样的:
这个工作。但我不确定我的实现是否合理。这感觉有点哈克。我不想使用这个最后的度假选项,我希望有一个更清洁的选项。
在选项2中,有没有办法覆盖'clicked' pyqtSignal通过'QAbstractButton'给出将呼叫添加到日志? – Max
'clicked'不是一个函数,但它是一个pyqtSignal。正如我在帖子中解释的那样,绝对不是要走的路。 –
假设我简化了一下,我宁愿不按照你展示给我的方式连接一个信号中的多个插槽。 – Max