Python动态函数生成

标签 python pyqt

我正在使用 PyQt 并想创建一个基于字符串列表的菜单。

问题是当我想调用“addAction”时,它需要一个不接受任何参数的回调函数(针对每个字符串)。

对于简单的菜单,这会很好:例如

menu.addAction("Open", self.open)
menu.addAction("Exit", self.quit)

但是,我只想使用一个函数并将“操作字符串”作为参数传入。

我想知道 python 是否可以做这样的事情:

def f(x, y):
    print x + 2*y



# These 2 variables are of type: <type 'function'>
callback1 = f
callback2 = f(x=7, *)
# NB: the line above is not valid python code.
# I'm just illustrating my desired functionality

print callback1(2,5)  # prints 12
print callback2(5)    # prints 17

这是我的代码片段:

def printParam(parameter):
    print "You selected %s" % parameter


# parameters = list of strings

menu_bar = QMenuBar()
menu = menu_bar.addMenu('Select Parameter')
for parameter in parameters:
    # This line will not work because the action does not pass in
    # any arguments to the function
    menu.addAction(parameter, printParam)

非常感谢任何建议

最佳答案

functools.partial()允许您提前提供一些参数。它将允许您根据需要进行自定义回调。

>>> from functools import partial
>>> basetwo = partial(int, base=2)
>>> basetwo.__doc__ = 'Convert base 2 string to an int.'
>>> basetwo('10010')
18

关于Python动态函数生成,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6682688/

相关文章:

python - Ubuntu 13.04 上的 PySide 导入错误

python - 使用 QWebView 请求的 POST 请求

python - 如何在unittest中捕获python子进程stdout

python - 在 Python 中使用 numpy 和 scipy 在 matplotlib 中制作分箱箱线图

python - 使用 id() 函数比较 Python + IDLE 中的两个对象,结果不同

python - 使用 numpy 在边界框中查找点

python - 如果涉及最后一行,QPlainTextEdit 中的取消缩进功能会导致段错误

python - 通过添加小数时间增量增量来删除重复的日期时间索引值

qt - PyQt:如何设置 QTreeView 的行高

python - 从 Linux 中的 acpi 事件执行 PyQt 应用程序