【问题标题】:What is the the way to catch the ipyvuetify radio button group value catcher?捕获 ipyvuetify 单选按钮组值捕获器的方法是什么?
【发布时间】:2021-04-15 09:15:46
【问题描述】:

我有一个包含单选按钮组的小部件,例如:

parts =vue.RadioGroup(children=[vue.Radio(label='XX'),
                                             vue.Radio(label='YY'),
                                             vue.Radio(label='ZZ')])

我不知道如何访问用户点击的内容,因此我尝试检查单选按钮组的所有属性:

out = widgets.Output()

def on_click_radio(widget, event, data):
    with out:
        out.clear_output()
        print("you have clicked", data)
        print("v_model is:", widget.v_model)
        print("value is", widget.value)
        print("active-class is", widget.active_class)
        widgetsKeys = widget.keys
        
#         for key in widgetsKeys:
#             print(f'{key}: ',eval(f'widget.{key}'))
#         
        

parts.on_event("change",on_click_radio)

display(parts,out)

我看到数据从 0 变为 2 ( [0,1,2] ) 但我想访问值“XX”、“YY”或“ZZ”?

单选按钮组中要访问的属性是什么? 我以为它会是文本输入中的 v_model,但事实并非如此。

谢谢

PS1:它应该是以下属性之一: https://vuetifyjs.com/en/api/v-radio-group/#props 但是我无法通过全部打印来弄清楚是哪一个

PS2:通过 '_trait_values' 字典访问这些值似乎令人头疼。对吧?

【问题讨论】:

    标签: python ipywidgets ipyvuetify


    【解决方案1】:

    您需要初始化无线电组中的 v_model。然后您可以从 Radio Group 子项中找到该标签。见下文。

    import ipyvuetify as vue
    parts =vue.RadioGroup(
                v_model=None,
                children=[
                     vue.Radio(label='XX'),
                     vue.Radio(label='YY'),
                     vue.Radio(label='ZZ'),
                        ])
    
    def on_click_radio(widget, event, data):
        print("Active radio label is", widget.children[widget.v_model].label)
            
    parts.on_event("change",on_click_radio)
    
    parts
    

    【讨论】:

    • 它仅在不使用单个收音机上的“值”时才有效。
    【解决方案2】:

    有两种可能的解决方案。您更喜欢哪一种取决于您的具体情况。

    解决方案 1:使用 Radio 传递一个值

    parts = vue.RadioGroup(
        children=[
            vue.Radio(label='XX', value='XX'),
            vue.Radio(label='YY', value='YY'),
            vue.Radio(label='ZZ', value='ZZ')
        ]
    )
    

    这足以填充数据:

    你点击了XX

    解决方案 2:将 on_click_radio 方法附加到单个 Radio 而不是 RadioGroup:

    xx = vue.Radio(label='XX')
    yy = vue.Radio(label='YY')
    zz = vue.Radio(label='ZZ')
    
    parts = vue.RadioGroup(children=[xx,yy,zz])
    
    def on_click_radio(widget, event, data):
        print("label is", widget.label)
    
    xx.on_event("change",on_click_radio)
    yy.on_event("change",on_click_radio)
    zz.on_event("change",on_click_radio)
    

    这将使您能够访问通过 on_click_radio 方法的 widget 参数单击的 Radio 小部件:

    标签是XX

    【讨论】:

    • 所以无法收听整个 Radiogroup...mmmm
    • 是的,请参阅解决方案 1。然后,您就无法根据需要轻松访问单击的 Radio 的属性
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2011-02-04
    • 2019-11-26
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-01-25
    • 1970-01-01
    相关资源
    最近更新 更多