python-3.x 如何使用反射库中的on_key_down事件在按下回车键时执行函数

yhuiod9q  于 2023-10-21  发布在  Python
关注(0)|答案(2)|浏览(148)

我正在使用反射库开发一个Web应用程序,我试图实现一个功能,当用户在输入字段中按Enter键时,该功能将执行。具体来说,我有一个Input组件,我希望在用户按Enter键时触发一个搜索函数。
以下是我迄今为止尝试过的:

# My State class
class State(rx.State):
    # ... (other state variables)

    def handle_key_press(self, event):
        if event.type_ == 'key_down' and event.key == 'Enter':
            self.handle_search()

# My Input component
rx.input(
    placeholder="Search here...",
    on_key_down=State.handle_key_press,
)

但是,我遇到了一个错误,函数没有按预期触发。我已经检查了文档,但是我找不到关于on_key_down事件返回的事件对象的结构的详细信息。
谁能给我提供更多关于on_key_down事件触发器返回的事件对象结构的信息?具体来说,我应该检查哪些属性来确定是否按下了Enter键?此外,如果有更好的方法在反射库中实现此功能,我将非常感谢任何指导。
谢谢您的帮助!

nuypyhwy

nuypyhwy1#

只是if语句错了。
同样重要的是,在调用现有函数时,必须使用用户返回。例如,当使用搜索框时,无论是按回车键还是单击按钮,都会调用相同的搜索函数。

# ---------- state.py ----------
class State(rx.State):
    def search(self):
        # Search logic
        pass
    
    def search_on_key_down(self, event):
        if event.key == "Enter":
            return self.search()


# ---------- myapp.py ----------

# Input field with the possibility to search with Enter
rx.input(
    placeholder="Search here...",
    on_key_down=State.search_on_key_down,
)

# Button to search
rx.button(
    "Search",
    on_click=State.search,
)
fquxozlt

fquxozlt2#

至少在Reflex 0.2.6版本中,您可以直接在事件变量中以字符串的形式获取键。所以,你的代码应该看起来像这样:

# My State class
class State(rx.State):
    # ... (other state variables)

    def handle_key_press(self, event):
        if event == 'Enter':
            self.handle_search()

# My Input component
rx.input(
    placeholder="Search here...",
    on_key_down=State.handle_key_press,
)

相关问题