2013-08-25 6 views
2

Я бы создал кнопку с тремя вариантами, которая меняет текст, когда вы делаете выбор.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, либо анонимные функции в сочетании с одной параметризованной функцией для выполнения всех задач. Обе версии (с использованием partial и lambda) показаны в примере:

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

 Смежные вопросы

  • Нет связанных вопросов^_^