我试图避免需要提交按钮。以下代码当前正在远程 jupyter 实验室运行。仅当光标焦点从密码小部件中移除后,才会打印该消息。我想要回车来触发消息打印。有什么线索吗?
from panel.widgets import PasswordInput, TextInput
pn.extension()
def on_enter(event=None):
message_pane.object = "<h2>Password Entered</h2>"
username_input = TextInput(name='Username')
password_input = PasswordInput(name='Password', width=200)
message_pane = pn.pane.HTML('')
layout = pn.Column(username_input, password_input, message_pane)
layout.servable()
在 ipywidgets 中,这可以通过观察来完成。
Panel 不像 ipywidgets 那样使用事件处理程序。要基于输入值的变化采取行动,你需要使用反应式编程范例。你可以通过创建与你的密码输入值相关联的回调函数来做到这一点。
这是一个工作示例:
import panel as pn
pn.extension()
def update_message(event=None):
"""当密码输入值发生变化时更新消息窗格的回调函数。"""
if password_input.value:
message_pane.object = "<h2>密码已输入</h2>"
else:
message_pane.object = ""
username_input = pn.widgets.TextInput(name='用户名')
password_input = pn.widgets.PasswordInput(name='密码', width=200)
message_pane = pn.pane.HTML('')
# 为密码输入的 'value' 属性创建一个链接,以便在值发生变化时调用 update_message
password_input.link(message_pane, value='object', callbacks={'value': update_message})
layout = pn.Column(username_input, password_input, message_pane)
layout.servable()
在这个修改后的代码中:
-
我们创建了一个名为
update_message
的函数,它接受一个事件对象(尽管我们没有在示例中使用它)。这个函数检查密码输入的值。如果值不为空,它会更新消息窗格以指示输入了密码,否则它会清除消息窗格。 -
我们使用
password_input.link
方法创建一个从password_input
小部件到message_pane
小部件的反应式链接。这表示每当password_input
的value
属性发生变化时,message_pane
的object
属性都会使用update_message
函数的结果进行更新。
使用这种方法,无需特别监听回车键,因为只要值发生变化,回调就会更新消息窗格,包括用户按回车键时。
标签:python,panel From: 78808891