コンテキストメニュで使用するシグナルの量を減らそうとしています。このメニューは、プログラムの動作モードを切り替える動作で構成されているため、スロットで実行される操作は非常に簡単です。 QMenuのマニュアル::トリガー、PyQt:シグナルを1つのスロットに集約する
通常の引用、あなたは、独自のカスタムスロットに各メニューアクションのトリガー()信号を接続し、時にはあなたは、とき例えば、単一のスロットに複数のアクションを接続することになるでしょう「左揃え」、「中央」、「右揃え」など、密接に関連した一連のアクションがあります。
しかし、私はこれを達成する方法を理解することができず、ドキュメントはこれ以上詳細には入りません。
メニューactionMenu
にactionOpMode1
とactionOpMode2
のアクションがあり、スロットがsetOpMode
であるとします。私はsetOpMode
を、何らかのアクションがトリガーされたかどうかに関係するパラメータで呼び出すようにします。
QObject.connect(self.actionMenu, SIGNAL('triggered(QAction)'), self.setOpMode)
しかし、私もそれがactionMenuはいわば、「トリガー感じない」んことを示唆しているsetOpModeを呼び出すためにやったことがなかった:私は、このテーマに様々な順列を試してみました。
this SO questionで
、lamdbasで行うことができることを示唆していますが、この:
QObject.connect(self.actionOpMode1, SIGNAL('triggered()'), lambda t: self.setOpMode(t))
は"<lambda>() takes exactly 1 argument (0 given)"
を与えます。私はこれがどのように動作するはずかを本当に理解しているとは言えないので、clicked()からtriggered()に移動するときに何か問題が起きた可能性があります。
どうやってですか?
+1、QSignalMapperはこの目的のためにはっきりと設計されています。 –
-1 PythonでQSignalMapperを使用する必要はありません。 –