首页 > 解决方案 > 是否可以为 npyscreen 文本字段中的输入键创建自定义处理程序?

问题描述

我正在尝试在 Python 中使用 npyscreen 构建一个聊天应用程序。当在Textfield小部件上按下 enter 时,没有任何反应。我想让这个动作将消息发送到服务器。

我已经通过使用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 时被调用。是否可以做我想做的事,如果可以,怎么做?

标签: pythonhandlerenternpyscreen

解决方案


self.Textfield.entry_widget.handlers.update({curses.ascii.NL: self.input_send})


推荐阅读