2013-08-25 3 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

관련 문제