2013-08-25 45 views
2

我會創建一個帶有3個選項的按鈕,當您做出選擇時,它會更改文本。Qt4,QMenu addAction,連接帶參數的函數

該解決方案適用於我:

def swTrigger(self): 
    self.setTrigger(self.ui.triggerButton,'Software') 
def hwTrigger(self): 
    self.setTrigger(self.ui.triggerButton,'Hardware') 
def bothTrigger(self): 
    self.setTrigger(self.ui.triggerButton,'Both') 

def setTrigger(self,pushButton,value): 
    pushButton.setText(value) 
    #other actions 

def uiConfig(self):  
    ##triggerbutton configuration 
    menu = QtGui.QMenu() 
    menu.addAction('Software',self.swTrigger) 
    menu.addAction('Hardware',self.hwTrigger)   
    menu.addAction('Both', self.bothTrigger) 
    self.ui.triggerButton.setText("Software") 
    self.ui.triggerButton.setMenu(menu) 

但我想避免的方法爲每個菜單項,因爲我想使動態菜單項。

有沒有更好的方法來做到這一點?

回答

4

您可以將partial或匿名函數與僅有一個參數化函數組合使用來完成所有任務。兩個版本(使用partiallambda)中示出了例如:

from functools import partial 

def setTrigger(self, pushButton,value): 
    pushButton.setText(value) 
    #other actions 

def uiConfig(self):  
    ##triggerbutton configuration 
    self.ui.triggerButton.setText("Software") 
    self.ui.triggerButton.setMenu(menu) 

    menu = QtGui.QMenu() 
    menu.addAction('Software', partial(self.setTrigger, self.ui.triggerButton, 'Software')) 
    menu.addAction('Hardware', lambda: self.setTrigger(self.ui.triggerButton, 'Hardware')) 
+0

哇,感謝,這很簡單^^」 – salvo