提问人:jvkloc 提问时间:11/10/2023 更新时间:11/10/2023 访问量:24
Holoviz Panel:如何在回调方法中提取按钮名称?
Holoviz Panel: how to extract the button name in a callback method?
问:
我需要 Holoviz Panel 回调方法的按钮名称,因为该名称还用作包含单击时要执行的 sql 命令的字典的键。我试图搜索传递给回调的事件是否可能具有一些属性,包括名称,但我什么也没找到。必须有一种(?)方法来识别已单击的按钮。有人可以帮我解决这个问题吗?以下格式适用于 Jupyter Lab,但名称提取除外。
class Query:
def __init__(self):
self.buttons = [btn_0, btn_1, btn_2]
self.data = dict
def callback(self, event):
value = self.dict[button_name]
# Run an SQL query using the value
return (the query result)
def bind_buttons(self):
for button in self.buttons:
pn.bind(callback, self.button, watch=True)
query = Query()
query.bind_buttons()
query_buttons = pn.Column(
'# Queries',
query.buttons[0],
query.buttons[1],
query.buttons[2],
)
答:
0赞
jvkloc
11/10/2023
#1
这个问题可以通过使用 而不是 来规避。-method 允许从 中提取名称。以下模式有效。on_click
bind
on_click
event.obj.name
class Query:
def __init__(self):
self.buttons = [btn_0, btn_1, btn_2]
self.data = dict
def callback(self, event):
value = self.dict[event.obj.name]
# Run an SQL query using the value
return (the query result)
def bind_buttons(self):
for button in self.buttons:
button.on_click(callback)
query = Query()
query.bind_buttons()
query_buttons = pn.Column(
'# Queries',
query.buttons[0],
query.buttons[1],
query.buttons[2],
)
1赞
Yuri R
11/10/2023
#2
在 Panel 中,当您将回调绑定到按钮时,绑定到该按钮的函数默认不会接收任何参数。但是,您可以使用函数将其他参数传递给回调。functools.partial
import panel as pn
from functools import partial
class Query:
def __init__(self):
self.buttons = [pn.widgets.Button(name='btn_0'),
pn.widgets.Button(name='btn_1'),
pn.widgets.Button(name='btn_2')]
self.data = {'btn_0': 'query_0', 'btn_1': 'query_1', 'btn_2': 'query_2'}
def callback(self, event, button_name):
value = self.data[button_name]
print(f'Button {button_name} was clicked! Running query: {value}')
# Run an SQL query using the value
# return (the query result)
def bind_buttons(self):
for button in self.buttons:
button.on_click(partial(self.callback, button_name=button.name))
query = Query()
query.bind_buttons()
query_buttons = pn.Column(
'# Queries',
*query.buttons,
)
query_buttons.servable()
评论
0赞
jvkloc
11/10/2023
确实,谢谢。另一个感谢您指出开箱清单。*
评论