python ipyvuetify 关闭浮动对话框(ipywidgets)

python ipyvuetify closing floating dialog (ipywidgets)

我正在使用 ipyvutify 尝试编写出色的 GUI。 它看起来很棒,但对于从未做过 HTML & CSS.

的人来说有点难

以下是点击“打开对话框”按钮时生成浮动对话框的完整代码。

我想了解使用 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]))

如果您将上面的代码粘贴到您的某个单元格中,您会发现我想了解的以下奇怪行为。

如果您不在 VISUALIZATION PART 中显示 exampledialog,则 OTHER 按钮将不起作用。仅当 exampledialog 是 Layout 的子项的一部分时,该按钮才有效。 另外对话框本身的按钮消失一次是运行第一次

这真是一件奇怪的事情。 谁能给个解释。

一般的问题是如何通过对话框外的按钮打开和关闭对话框。 dialog.value=True 似乎没有用

除了第一个按钮的变量名称中的一个小错字外,它看起来都是正确的。

第一个按钮应该是 'v_btn_OPEN' 而不是 'v_btn_OTHER',因为您在对话框中使用了 'other' 按钮作为关闭按钮。

现在,回答您的问题:

在可视化部分中包含示例对话框的必要性: exampledialog 需要添加到 [DOM][1] 中,否则对于客户端来说它们根本不存在。使用 ipyvuetify 这是通过将元素输出到客户端来完成的。仅仅将它们作为 python (server-side) 个对象是不够的。

[1]: https://www.w3.org/TR/WD-DOM/introduction.html#:~:text=The%20Document%20Object%20Model%20(DOM,文档%20is%20accessed%20and%20manipulated.

对话框本身的按钮消失一次是 运行 第一次: 这似乎与 ipyvuetify 中插槽行为中的当前错误有关,如你的情况。 您使用的解决方法是将按钮放在元素外部并通过 'on_click_v_btn_OPEN' 函数链接它们,目前是建议的解决方案,直到修复此错误。