假设我有一个代码,其中一个按钮编码为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谢谢
发布于 2020-11-30 18:53:25
"on_click_load“仍然是一个本地python函数,因此您可以在脚本中简单地访问它。只需使用虚拟对象填充不需要的变量(可能是小部件和事件),并根据需要填充数据变量。
如果你需要一些来自客户端的输入,那就更困难了。我不知道远程控制客户端的方法。到目前为止,我唯一能做的就是用一个私有类扩展VuetifyTemplate,并指定一些在“挂载”时运行的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中以一种懒惰的方式自动将计算结果复制到我的本地剪贴板。
发布于 2020-12-09 00:20:48
查看v.Btn类的描述,我发现了以下内容:
| ----------------------------------------------------------------------
| 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)应该做到这一点
https://stackoverflow.com/questions/65053418
复制相似问题