我試圖創建一個信號和插槽之間的簡單連接,但發現自己卡住試圖調用一個額外的功能。有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