在 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()
我目前正在使用 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()