簡體   English   中英

Bokeh - 具有 Python 功能的 CustomJS 數據下載數據和提醒用戶

[英]Bokeh - CustomJS data with Python functions to Download data and Alert users

我正在嘗試創建一個散景服務器(使用 Python -m bokeh serve my_pythonfile.py 運行),讓用戶在其中修改一些我想在 CustomJS function 中使用的數據。 我試着在這里做一個我的 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的實際數量,有什么想法/提示嗎?

我想要做的實際事情是讓用戶下載一些數據(json 文件),想到的一種解決方案是使用 html5 關鍵字download 在另一種情況下,我想使用alert關鍵字讓用戶知道他輸入了一些錯誤數據。

Bokeh 服務器和客戶端之間不同步原生int值。

args={'data': self.return_data()}本質上是args={'data': 0}

要在服務器和客戶端之間同步 object,子類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

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM