python - Qt4,QMenu addAction,带参数的连接函数

标签 python pyqt pyside qpushbutton qmenu

我会创建一个包含 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)

但我想避免为每个菜单项创建一个方法,因为我想创建动态菜单项。

有更好的方法吗?

最佳答案

您可以使用部分 或匿名函数与仅一个参数化函数的组合来完成所有任务。示例中显示了两个版本(使用 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'))

关于python - Qt4,QMenu addAction,带参数的连接函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18428095/

相关文章:

python - Sqlalchemy 一对多插入

python - 有没有办法让 python 脚本知道它是什么类型的文件?

python - PyQT/PySide 与 PyObjC : worth it?

python - QTimer 与超时方法的连接在测试用例 (Python) 中不起作用

python - 当 PyQt4 中的 QRunners 的 QThreadPool 执行完成时得到通知

python - 通过 PySide 设置 QTreeWidget 中标题的光标

python - 如何显示 PySide/PyQt UI 并自动运行其方法之一?

javascript - django 的 CSS/JavaScript 管理器

python - 类型错误 : cannot perform reduce with flexible type (list of lists of string)

python - 如何在 QTableWidget 中自定义排序行为