当前位置: 首页 > 知识库问答 >
问题:

短划线绘图仪实时更新数据表

欧阳俊捷
2023-03-14

我想实现一个实时更新功能,添加列功能基于可编辑DataTablehttps://dash.plotly.com/datatable/editable的留档,以便在CSV文件更新时向可更新的添加一列。我有回调工作,我可以添加新的列,因为新的CSV数据是通过实时更新更新的,但我遇到了一些问题。在我的第一次尝试中(标记为第一个代码),我声明了一个全局变量(我知道在DASH中是坏的),试图跟踪当前的CSV内容,并将其与更新的CSV文件进行比较,以检查新数据,但此版本失败在初始启动时加载现有的CVS数据,并且只添加新数据。第二个代码将现有的CSV数据加载到列中,但在实时更新时,它只是添加重复的列。我不能简单地用一个新的CSV文件重新制作整个数据,因为如果单元格中有用户输入,那么更新时就会丢失。

因此,我的问题是:如何在不使用Dash中的全局变量的情况下存储某个对象的状态(即CSV数据的行数),以便能够将CSV文件的现有状态与新状态进行比较。我看不出这是如何实现的,因为分配的变量在实时更新时被重置。我读过关于隐藏Div和在用户浏览器会话中存储数据的内容,但我无法让它工作。这是我应该走的方向还是有更优雅的解决方案?

html.Div([dash_table.DataTable(
        id='editing-columns',
        columns=[{
                'name': 'Parameter',
                'id': 'column1',
                'deletable': True,
                'renamable': True
        }],
        style_cell={
                'whiteSpace': 'normal',
                'height': 'auto',
                'width': '20',
                # 'minWidth': '50px',
                'textAlign': 'left',
    },
        data=[
                {'column1': j}
                for j in table_contents
        ],
        editable=True,
    )], className="drug_input"),

#First code
@app.callback(Output('editing-columns', 'columns'),
              [Input('graph-update', 'n_intervals')],
              [State('editing-columns', 'columns')])
def update_columns(n, existing_columns):
    check_length = []
    global sierra
    with open('assets' + '/' + 'record ' + str(current) + '.csv', 'r') as rf:
        reader = csv.reader(rf)
        for a in reader:
            check_length.append(a[3])

    if len(check_length) == 0:
        return existing_columns

    elif len(check_length) > sierra:
        existing_columns.append({
            'id': check_length[-1], 'name': check_length[-1],
            'renamable': True, 'deletable': True
            })

        sierra = len(check_length)
        return existing_columns

    else:
        return existing_columns
#Second code
@app.callback(Output('editing-columns', 'columns'),
              Input('graph-update', 'n_intervals'),
              State('editing-columns', 'columns'))

def update_columns(n, existing_columns):
    counter = 0
    with open('assets' + '/' + 'record ' + str(current) + '.csv', 'r') as rf:
        reader = csv.reader(rf)
        for a in reader:

            counter = counter + 1
            existing_columns.append({
                'id': 'counter', 'name': a[3],
                'renamable': True, 'deletable': True
            })

        return existing_columns

共有1个答案

东方俊力
2023-03-14

我读过关于隐藏分区和在用户浏览器会话中存储数据,但我不能让它工作。这是我应该走的方向还是有更优雅的解决方案?

是的,您应该为此使用store组件。

您可以将所有内容存储在dict中,一个键用于原始文件,另一个键包含用户输入的修改过的文件。确保每个回调都以状态在存储中读取。一个应该输出到表,另一个应该输出到存储。

 类似资料:
  • 我有一个带有可删除行和列的dash DataTable对象。我想根据可见行更新图形。我不确定如何创建回调以及要传递哪些参数。在浏览器中删除行时,表对象中存储的数据实际上可能不会更改。

  • 封装了 html+css+js 的曲线图,可以通过代码实时动态更新和显示数据。 本代码中的数据都是模拟的,如果有真实数据替换掉即可。 [Code4App.com]

  • 我是一个非常活跃的Dash用户,我已经开始发现我的Dash使用中有很多限制,我意识到关于如何将组件转换为dash的信息/内容绝对有限,有过时和非常简单的例子...我对Javascript或React几乎没有任何了解,我完全不知道如何转换组件。 我试图将响应式网格布局组件从react.js转换为Ploly Dash,但我不知道在这种情况下应该如何处理属性?链接到组件:https://github.c

  • 如果MPD文件没有任何段URL列表,如何确定DASH媒体的段数?它只有一个段模板,所以我不知道与这个MPD相关联的媒体有多少段。这就是我说的MPD: 我的目标是检索所有存在段的URI。

  • WebStorm似乎是web开发的IDE,我一直很喜欢它。唯一的问题是过梁的错误强调: 由于这种浅色,我花了相当多的时间进行调试,而错误本来就不应该发生,我环顾四周,没有找到更改颜色的方法。这在WebStorm中可能吗? 即使是黑色的主题也没有强烈对比的下划线。我们能改变它吗?

  • 问题内容: 我同时使用Javafx和线程,并且遇到了这个问题,我制作了一个按钮,然后单击该按钮(使用事件处理程序)时,我做了一个for循环,将按钮更改为1,2,3,4 ,5,然后在每个中间延迟一秒钟。像倒计时! 但是发生的事情是延迟了5秒钟,并将按钮的文本更改为5。 问题是我希望看到它在1到5之间变化,但我看到的只是在5秒延迟结束时为5。我认为它会更改按钮文本,但看不到。我可能与类中的方法有关。