信号とスロットの間に簡単な接続を作成しようとしていますが、余分な機能を呼び出そうとしています。私が来た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)
そして、このように実装:
これは機能します。しかし、私の実装が理にかなっているかどうかはわかりません。それはハッキーのような感じです。私はこの最後のリゾートオプションを使用しないことを好むだろうし、私は清潔なオプションがあることを望んでいる。
、QAbstractButton' ''で与えclicked' pyqtSignalを無効にする方法がありますログへの呼び出しを追加するには? – Max
'clicked'は関数ではありませんが、pyqtSignalです。私が記事で説明したように、確かに行く方法ではありません。 –
私はちょっと単純化したと仮定して、あなたが私に見せたように、1つの信号からいくつかのスロットを接続したくないです。 – Max