使用prompt_toolkit对按键做出反应



我正在尝试使用prompt_toolkit,这样我就可以在不等待用户按Enter键的情况下从用户那里获得输入。我设法创建了事件并将它们与键相关联,但我不知道如何从事件中实际操作我的程序。

from prompt_toolkit import prompt
from prompt_toolkit.application import run_in_terminal
from prompt_toolkit.key_binding import KeyBindings
i = 2
bindings = KeyBindings()
@bindings.add('c-t')
def _(event):
" Say 'hello' when `c-t` is pressed. "
def print_hello():
print('hello world')
run_in_terminal(print_hello)
@bindings.add('c-x')
def _(event):
" Exit when `c-x` is pressed. "
event.app.exit()
@bindings.add('d')
def _(event):
i *= 2
text = prompt('> ', key_bindings=bindings)
print(f'You said: {text}')
print(f'i is now {i}')

我希望这个程序:

  • 打印"你好世界";当按下Ctrl+T
  • 按下Ctrl+X时退出
  • 按下d时,将i的值加倍

它做1和2,但3给出Exception local variable 'i' referenced before assignment。但即使在Python文档中,我们也可以看到这个例子(https://docs.python.org/3/reference/executionmodel.html):

i = 10
def f():
print(i)
i = 42
f()

那么,我该如何制作一个改变变量的键绑定呢?

您正在引用本地函数中的全局变量,只需指出这是您想要的,否则您将引用一个不存在的本地变量。

@bindings.add('d')
def _(event):
global i     # fixes your problem
i *= 2

请参阅上面的一行更改!

相关内容

  • 没有找到相关文章

最新更新