我試圖減少我在contextmenus中使用的信號量。菜單由切換程序操作模式的動作組成,因此插槽執行的操作非常簡單。報價上QMenu的文檔::觸發,PyQt:將信號合併到一個插槽
通常情況下,每個菜單動作的觸發()信號連接到它自己的定製插槽,但有時你會想幾個動作,當連接到一個單一的插槽,例如你有一組密切相關的行爲,例如「左對齊」,「中心」,「右對齊」。
但是,我不知道如何做到這一點,文件沒有進一步的細節。
假設我在菜單actionMenu
中有動作actionOpMode1
和actionOpMode2
,以及插槽setOpMode
。我想用一個參數來調用setOpMode
,這個參數與某些操作相關。我想在這個主題上不同的排列:
QObject.connect(self.actionMenu, SIGNAL('triggered(QAction)'), self.setOpMode)
但我從來沒有得到它叫setOpMode,這表明actionMenu從來沒有「感覺觸發」,可以這麼說。
在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的設計非常適合這個目的(我認爲它也非常優雅),所以它提供了架構解決方案。 – 2009-06-30 15:34:17