Виджеты и редакторы из picotui
поддерживают сигналы и обработчики сигналов. Это означает, что можно обрабатывать событие, инициируемое пользователем, например нажатие клавиши enter.
# 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)
Наиболее важным предварительным условием является то, что код выполняется внутри основного l oop. Код, который вы пишете, должен запускаться внутри бесконечного l oop, который использует aws виджетов и собирает пользовательские данные. Без такого бесконечного l oop ваш код завершает работу сразу после прорисовки всего, и вы не получаете изменений для обработки сигналов. Библиотека предоставляет основной l oop, вам нужно обязательно его запустить.
def handle_enter(w):
print(w)
e = WTextEntry(100, "")
d.add(22, 40, e)
e.on("enter", handle_enter)
res = d.loop()
Метод d.loop()
- это то, что запускает бесконечный основной l oop и позволяет обрабатывать события .
РЕДАКТИРОВАТЬ: Несмотря на то, что замечания в исходном ответе верны, кажется, что виджет WTextEntry
не поддерживает сигнал enter
. Это видно из исходного кода , так как обработка ключа 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()