我会创建一个包含 3 个选项的按钮,当您做出选择时它会更改其文本。
这个解决方案适合我:
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)
但我想避免为每个菜单项创建一个方法,因为我想创建动态菜单项。
有更好的方法吗?
最佳答案
您可以使用部分
或匿名函数与仅一个参数化函数的组合来完成所有任务。示例中显示了两个版本(使用 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'))
关于python - Qt4,QMenu addAction,带参数的连接函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18428095/