python - python ipyvuetify 关闭浮动对话框(ipywidgets)
问题描述
我正在使用 ipyvutify 尝试编写出色的 GUI。它看起来很棒,但对于从未做过 HTML 和 CSS 的人来说有点难。
以下是单击“OPEN DIALOG”按钮时生成浮动对话框的完整代码。
我想了解使用 ipyvuetify 打开和关闭浮动对话框的功能,并且使用以下代码即使代码有效(不足)我也无法弄清楚。
目标是用一个按钮打开一个对话框,并且在对话框内也有一个关闭按钮(与其他按钮一起)
import ipyvuetify as v
lorum_ipsum= 'loren loren'
#oepn dialog:
v_btn_OTHER = v.Btn(class_='mx-2 light-blue darken-1', children=['OTHER'])
def on_click_v_btn_OPEN (widget, event, data):
exampledialog.value = True
pass
v_btn_OPEN.on_event('click', on_click_v_btn_OPEN)
# CLOSE BUTTON INSIDE THE DIALOG
v_btn_CLOSE = v.Btn(class_='mx-2 light-blue darken-1', children=['CLOSE'])
def on_click_v_btn_CLOSE (widget, event, data):
exampledialog.value = False
v_btn_CLOSE.on_event('click', on_click_v_btn_CLOSE)
# ACTION BUTTON INSIDE THE DIALOG
v_btn_OTHER = v.Btn(class_='mx-2 light-blue darken-1', children=['OTHER'])
def on_click_v_btn_OTHER (widget, event, data):
# code to open facebook.com in a new tab
pass
v_btn_OTHER.on_event('click', on_click_v_btn_OTHER)
# THE DIALOG
exampledialog = v.Dialog(width='500',
v_slots=[{
'name': 'activator',
'variable': 'x',
'children': v.Btn(v_on='x.on', color='success', dark=True, children=[
'OTHER dialog'
]),
}],
children=[
v.Card(children=[
v.CardTitle(class_='headline gray lighten-2', primary_title=True, children=[
"Lorem ipsum"
]),
v.CardText(children=[
lorum_ipsum,
v.TextField(label='Label', placeholder='Placeholder'),
v_btn_CLOSE,
v_btn_OTHER,
]),
])
])
# VISUALIZATION
display(v.Layout(children=[v_btn_OPEN,exampledialog]))
如果您将上面的代码粘贴到您的一个单元格中,您将意识到我想理解的以下奇怪行为。
如果您不在可视化部分中显示示例对话框,则其他按钮将不起作用。仅当 exampledialog 是 Layout 的子级的一部分时,该按钮才起作用。此外,对话框本身的按钮在第一次运行时就会消失。
这真是一件奇怪的事情。谁能给个解释。
一般的问题是如何从对话框外的按钮打开和关闭对话框。dialog.value=True 似乎并没有真正起作用
解决方案
除了第一个按钮的变量名称中有一个小错字之外,它看起来都是正确的。
第一个按钮应该是“v_btn_OPEN”而不是“v_btn_OTHER”,因为您在对话框中使用“其他”按钮作为关闭按钮。
现在,针对您的问题:
在可视化部分中包含 exampledialog 的必要性: exampledialog 需要添加到 [DOM][1] 否则对于客户端它们根本不存在。使用 ipyvuetify 这是通过将元素输出到客户端来完成的。仅仅将它们作为 python(服务器端)对象是不够的。
[1]: https://www.w3.org/TR/WD-DOM/introduction.html#:~:text=The%20Document%20Object%20Model%20(DOM,document%20is%20accessed%20and%20manipulated .
对话框本身的按钮在第一次运行时消失:这似乎与 ipyvuetify 中当前插槽行为中的错误有关,如您的情况。在修复此错误之前,您通过在元素外部对接按钮并通过“on_click_v_btn_OPEN”功能链接它们来使用的解决方法目前是建议的解决方案。
推荐阅读
- swift - NavigationBar 和 TableView 之间的额外空间
- python - TypeError:将形状转换为 TensorShape 时出错:只接受大小为 1 的数组
- java - 即使表单字段留空,也会提交空字符串并在 Spring 中创建新实体
- python-3.x - sock.bind() - TypeError: 需要一个整数
- node.js - 在节点 js Web 应用程序中为用户组创建模型
- amazon-web-services - 我们可以使用 GCP composer 与 windows 实例通信吗?
- python - 如何在 Python3 中检查域详细信息?
- haskell - QuickCheck 组合器,用于在给定范围内缩小长度列表
- istanbul - 什么是纽约伊斯坦布尔的仪器仪表?
- angular - 带有服务器端渲染的 Angular 8