我正在查看一些植根于的代码urwid
:
import urwid
from functools import partial
from random import randint
class State(object):
def __init__(self, main_widget):
self.main_widget = main_widget
def handle_keystroke(app_state, key):
if key in ('q', 'Q'):
raise urwid.ExitMainLoop()
else:
loop.widget = urwid.Filler(urwid.Button('new rand int:' + str(randint(0, 100))))
app_state = State(urwid.Filler(urwid.Button('original widget')))
callback = partial(handle_keystroke, app_state)
loop = urwid.MainLoop(app_state.main_widget, unhandled_input=callback)
loop.run()
并注意到在定义之前loop
在函数中引用了它。unhandled_input
此外,它不是作为参数传递的,它只是按名称硬编码到函数中。1)为什么这是可能的,并且:2)有更清晰的选择吗?否则很难做到,因为 和 存在循环loop
依赖app_state
关系callback
。