Bokeh - 具有 Python 功能的 CustomJS 数据下载数据和提醒用户
Bokeh - CustomJS data with Python functions to Download data and Alert users
我正在尝试创建一个散景服务器(运行 Python -m bokeh serve my_pythonfile.py),我让用户修改一些我想在自定义函数。我试图在这里为我的 class 做一个简单的例子:
def __init__(self):
self.data = 0
self.click_me = self._get_click_button()
self.save_data = self._get_save_data()
def _get_click_button(self) -> Button:
click_me = Button(label='Add data')
click_me.on_click(self.add_data)
return click_me
def self.add_data(self):
self.data += 1
def _get_save_data(self) -> Button:
save = Button(label='Save data')
callback = CustomJS(args={'data': self.return_data()}, code="""console.log(data);""")
save.js_on_click(callback)
return save
def return_data(self) -> int:
return self.data
当我按下 Save data
按钮时,我总是在控制台中得到 0,我明白为什么,但我不知道如何获得 self.data
的实际数量,任何 ideas/tips?
我真正想做的是让用户下载一些数据(一个 json 文件),想到的一个解决方案是使用 html5 关键字 download
.在另一种情况下,我想使用 alert
关键字让用户知道他输入了一些错误数据。
原生 int
值未在 Bokeh 服务器和客户端之间同步。
args={'data': self.return_data()}
本质上是 args={'data': 0}
.
要在服务器和客户端之间同步对象,子类化 Model
并使用它。
from bokeh.core.properties import Int
from bokeh.models import Model
from bokeh.util.compiler import TypeScript
class MyModel(Model):
__implementation__ = TypeScript("""
import { Model } from "model";
export class MyModel extends Model {
constructor(attrs: any) {
super(attrs);
}
static init_MyModel() {
this.define(({ Int }) => ({
data: [Int, 0] as any,
}));
}
}
""")
data = Int
用法:
def __init__(self):
self.model = MyModel(data=0) # Modified
self.click_me = self._get_click_button()
self.save_data = self._get_save_data()
def _get_click_button(self) -> Button:
click_me = Button(label='Add data')
click_me.on_click(self.add_data)
return click_me
def add_data(self):
self.model.data += 1 # Modified
def _get_save_data(self) -> Button:
save = Button(label='Save data')
callback = CustomJS(args={'model': self.model}, code="""console.log(model.data);""") # Modified
save.js_on_click(callback)
return save
# def return_data(self) -> int: # Removed
# return self.data # Removed
我正在尝试创建一个散景服务器(运行 Python -m bokeh serve my_pythonfile.py),我让用户修改一些我想在自定义函数。我试图在这里为我的 class 做一个简单的例子:
def __init__(self):
self.data = 0
self.click_me = self._get_click_button()
self.save_data = self._get_save_data()
def _get_click_button(self) -> Button:
click_me = Button(label='Add data')
click_me.on_click(self.add_data)
return click_me
def self.add_data(self):
self.data += 1
def _get_save_data(self) -> Button:
save = Button(label='Save data')
callback = CustomJS(args={'data': self.return_data()}, code="""console.log(data);""")
save.js_on_click(callback)
return save
def return_data(self) -> int:
return self.data
当我按下 Save data
按钮时,我总是在控制台中得到 0,我明白为什么,但我不知道如何获得 self.data
的实际数量,任何 ideas/tips?
我真正想做的是让用户下载一些数据(一个 json 文件),想到的一个解决方案是使用 html5 关键字 download
.在另一种情况下,我想使用 alert
关键字让用户知道他输入了一些错误数据。
原生 int
值未在 Bokeh 服务器和客户端之间同步。
args={'data': self.return_data()}
本质上是 args={'data': 0}
.
要在服务器和客户端之间同步对象,子类化 Model
并使用它。
from bokeh.core.properties import Int
from bokeh.models import Model
from bokeh.util.compiler import TypeScript
class MyModel(Model):
__implementation__ = TypeScript("""
import { Model } from "model";
export class MyModel extends Model {
constructor(attrs: any) {
super(attrs);
}
static init_MyModel() {
this.define(({ Int }) => ({
data: [Int, 0] as any,
}));
}
}
""")
data = Int
用法:
def __init__(self):
self.model = MyModel(data=0) # Modified
self.click_me = self._get_click_button()
self.save_data = self._get_save_data()
def _get_click_button(self) -> Button:
click_me = Button(label='Add data')
click_me.on_click(self.add_data)
return click_me
def add_data(self):
self.model.data += 1 # Modified
def _get_save_data(self) -> Button:
save = Button(label='Save data')
callback = CustomJS(args={'model': self.model}, code="""console.log(model.data);""") # Modified
save.js_on_click(callback)
return save
# def return_data(self) -> int: # Removed
# return self.data # Removed