运行 以编程方式创建一个 ipyvuetify 按钮

run programmatically an ipyvuetify button

假设我有一个带有在 ipyvuetify 中编码的按钮的代码

v_btn_load  = vue.Btn(class_='mx-2 light-red darken-1', 
                           children=[vue.Icon(left=True, children=['get_app']),'Load data'])

def on_click_load(widget, event, data):
    #pseudo code: load file
    print("button run")
                
v_btn_load.on_event('click', on_click_load)

如何以编程方式 运行(单击)v_btn_load 按钮?

v_btn_load.click() does not work

谢谢

“on_click_load”仍然是本地 python 函数,因此您可以在脚本中简单地访问它。只需用假人(可能是小部件和事件)填写您不需要的变量,然后根据您的需要填写数据变量。

如果你需要客户的一些输入,那就更难了。我不知道如何远程控制客户端。到目前为止,我唯一能做的就是用私有 class 扩展 VuetifyTemplate,并在 'Mounted' 时指定一些 JS 代码为 运行。这将 运行 显示代码,但与触发点击行为不同:

下面是一个简单的例子,直接把一个变量的内容复制到本地剪贴板,不带任何显示元素:

import ipyvuetify as v
from traitlets import Unicode, observe


class toClipboard(v.VuetifyTemplate):
    """Copies a given string directly to the users clipboard.

       Parameters:
           clipboardValue - The value to offer for copying to the clipboard

       Example:
           tunnel = toClipboard(clipboardValue='VALUE_TO_COPY')       

           Upon change of the variable 'clipboardValue', it's content will be automatically pushed to the clipboard
       """

    clipboardValue = Unicode('').tag(sync=True)

    template = Unicode('''
        <script>
          export default {
            mounted () {
              var tmpElement = $('<textarea>').val(this.clipboardValue).appendTo('body').select();
              document.execCommand('copy');
              $(tmpElement).remove();
            },
          }
        </script>''').tag(sync=True)

    def __init__(self, *args, **kwargs):
        super().__init__(*args, **kwargs)
        
        self.observe(self.pushToClipboard, names=('clipboardValue'))
        
        display(self)


    def pushToClipboard(self, change):
        display(self)

作为一个额外的奖励,这个例子使用了 traitlets 的 observe 函数来在变量值改变时立即重新显示 JS。这是创建有点类似行为的廉价解决方法。

我不是在真正的 GUI 中使用上面的示例,而是在 Jupyther Notebook 中作为一种懒惰的方式来自动将计算结果复制到我的本地剪贴板。

查看 v.Btn class 的描述,我发现了这个:

 |  ----------------------------------------------------------------------
 |  Methods inherited from ipyvue.VueWidget.Events:
 |  
 |  fire_event(self, event, data)
 |  
 |  on_event(self, event_and_modifiers, callback, remove=False)

然后我假设

v_btn_load.fire_event('click', None)

应该做点什么