使用回调函数传递其他参数

时间:2018-03-07 22:19:29

标签: function callback urwid

以下示例(摘自此处:http://urwid.org/tutorial/index.html)显示了如何将键值传递给回调函数show_or_exit

import urwid

def show_or_exit(key):
    if key in ('q', 'Q'):
        raise urwid.ExitMainLoop()
    txt.set_text(repr(key))

txt = urwid.Text(u"Hello World")
fill = urwid.Filler(txt, 'top')
loop = urwid.MainLoop(fill, unhandled_input=show_or_exit)
loop.run()

如何通过这个取决于系统状态的回调将另一个参数传递给show_or_exit,这将是这样的?

...: param_val = 4
...:
...: def my_fun():
...:     #do something
...:     return param_val
...:
...: def show_or_exit(key, param_val):
...:     if key in ('q', 'Q'):
...:         raise urwid.ExitMainLoop()
...:     txt.set_text(repr(key))
...:     do_something(param_val)
...:
...: txt = urwid.Text(u"Hello World")
...: fill = urwid.Filler(txt, 'top')
...: loop = urwid.MainLoop(fill, unhandled_input=show_or_exit)
...: loop.run()

1 个答案:

答案 0 :(得分:1)

所以,有几种方法可以做到这一点。你可以使用全局变量,但我想你可能会问这个问题,因为你想要一个更好的方法来做到这一点(另外,全局变量无论如何都会笨拙地改变状态)。

对于此示例中的小程序,一种技术可能是使用一个存储状态的全局对象:

findElement

为了便于说明,我将此示例保持为最小,但该州类将从using the attrs library中受益。强烈推荐! :)

对于更复杂的程序,我建议构建支持回调事件的自定义小部件并单独管理状态:您可以看到an example of implementing that in this solitaire game