Можно ли сделать пользовательский обработчик для клавиши ввода в текстовом поле npyscreen? - PullRequest
1 голос
/ 07 апреля 2019

Я пытаюсь создать приложение чата с npyscreen на Python.Когда ввод введен в виджет Текстовое поле , ничего не происходит.Я бы хотел, чтобы это действие отправляло сообщение на сервер.

Я уже заставил его работать с помощью виджета MultiLineEdit и переопределил его метод

        def when_value_edited(self):

для отслеживания изменений ввода текста.Когда в текущей строке ввода будет найден символ новой строки, он отправит сообщение и очистит поле.Проблема с этим подходом состоит в том, что он немного грязный.Кроме того, я также предпочитаю использовать виджет Textfield вместо виджета MultiLineEdit .

Я пытался создать обработчик в главной форме, но метод eval_input никогда не былсработало.

class MainWindow(npyscreen.FormBaseNew):
    def create(self):
        new_handlers = {
            # Set ctrl+Q to exit
            "^Q": self.exit_func,
            # Evaluate input on newline or carriage return
            curses.ascii.NL: self.eval_input,
            curses.ascii.CR: self.eval_input
        }
        self.add_handlers(new_handlers)

    def exit_func(self, _input):
        exit(0)

    def eval_input(self, _input):
        print("TRIGGERED")
        self.parentApp.msg = self.widget_input.value
        self.widget_input.value = ""

Я ожидаю, что widget_input.value изменится на пустую строку, но ничего не происходит, когда я нажимаю клавишу ввода при вводе в виджете Textfield .Метод eval_input никогда не вызывается, а метод exit_func вызывается, как только я нажимаю control + q.Можно ли делать то, что я хочу, и если да, то как?

...