多くの項目での作業PyQtは、Qtの、一つのイベントハンドラ
-
19-09-2019 - |
質問
私は自分のフォーム上のチェックボックスのカップルを持っている、と私は、彼らがすべて同じロジックを実装しますので、それぞれに個別のイベントハンドラを記述する必要はありません。代わりに、私はチェックボックスがクリックされたかについて知っているただ一つのイベントハンドラを書きたい。
例えば。 Delphiで私はこの方法でそれを使用することができます:
function click_handler(sender):
begin
checked_box := sender.tag;
end;
ここで私は(Tagプロパティを手動でDelphiのIDEに設定された)いくつかの変数に現在の確認ボックス番号を覚えています。
私が検索し、イベントハンドラがsender
引数を持っていないので、私は、この使用してQtのを実装する方法を見つけることができません。
私はこのようにそれを実装し、それは便利ではありません。
# assign handlers (n assignments)
checkbox_1.clicked.connect(self.cb_1_click)
...
checkbox_<n>.clicked.connect(self.cb_<n>_click)
# separate handler for each check box (n functions, doing the same stupid work)
def cb_1_click:
self.cb_click(sender=1)
...
def cb_<n>_click:
self.cb_click(sender=n)
# main check box click logic (1 function)
def cb_click(sender):
# do something common for all checkboxes
ありがとうございます。
解決
あなたははQObject ::送信者()のスロットにを使用することができます信号を放射された人を見つけることができます。
また、あなたはこれらの問題を解決するために、正確に意図されている QSignalMapperするをチェックアウトする場合がありますます。
所属していません StackOverflow