在 python 中绑定回车键

Bind enter key in python

我目前正在使用 picotui 和 python 编写一个 tui 应用程序。我正在尝试使用 'WTextEntry' 小部件在我的表单上创建一个用户输入框,但是当我按下回车键时,我不知道如何从框中获取数据。绑定回车键的最佳方式是什么(理想情况下没有外部库)所以它像这样运行:

e = WTextEntry(100, "")
d.add(22, 40, e)
if("enter key is pressed"):
     e.get()

如有任何帮助,我们将不胜感激。

来自 picotui 的小部件和编辑器支持信号和信号处理程序。这意味着可以处理用户触发的事件,例如按下回车键。

# I'm assuming you already have a dialog at this point

def handle_enter(w):
    print(w)

e = WTextEntry(100, "")
d.add(22, 40, e)

e.on("enter", handle_enter)

最重要的先决条件是代码 运行 在主循环中。您编写的代码必须 运行 在一个无限循环中,该循环绘制小部件并收集用户输入。如果没有这样的无限循环,您的代码会在绘制完所有内容后立即完成,并且您无法获得处理信号的更改。该库提供了主循环,你需要确保运行它。

def handle_enter(w):
    print(w)

e = WTextEntry(100, "")
d.add(22, 40, e)

e.on("enter", handle_enter)

res = d.loop()

方法 d.loop() 启动无限主循环并允许您处理事件。

编辑:尽管原始答案中的评论是正确的,但小部件 WTextEntry 似乎不支持信号 enter。这从 source code 可以看出,因为 KEY_ENTER 键的处理被跳过。

看来解决方案是创建一个按钮并处理它的信号 click。在按钮的信号处理程序中,也可以处理文本输入。

这是一个简短的例子:

from picotui.context import Context
from picotui.screen import Screen
from picotui.widgets import *


def handle_click(w):
    with open('test.txt', 'w') as f:
        f.write(e.t)


with Context():

    d = Dialog(5, 5, 50, 12)

    d.add(1, 1, "Entry:")

    e = WTextEntry(100, "Text")
    d.add(10, 1, e)

    b = WButton(10, "Click")
    d.add(10, 10, b)
    b.on("click", handle_click)

    res = d.loop()