我试图根据输入数据制作一个仪表板表格,但我在添加更多行以添加新的输入.实际上,我读了这docs篇文章,我知道我可以直接在仪表板表格中输入,但我想从输入中更新仪表板表格.

下面是我的代码:

import pandas as pd
import numpy as np
from datetime import datetime as dt
import plotly.express as px
import dash
import dash_html_components as html
import dash_core_components as dcc
from dash.dependencies import Input, Output, State
import dash_table
import dash_bootstrap_components as dbc
from dash_extensions import Download
from dash_extensions.snippets import send_data_frame
import glob
import os
from pandas.tseries.offsets import BDay
import plotly.graph_objects as go

app = dash.Dash(__name__)

MD23 = pd.DataFrame({'Number':[],
                         'PW':[],
                         'Name 1':[],
                         'Name 2':[],
                         'Email':[],
                         'Web':[],
                         'Abc':[]}) 
# ------------------------------------------------------------------------

input_types = ['number', 'password', 'text', 'tel', 'email', 'url', 'search']

app.layout = html.Div([
    html.Div([
        dcc.Input(
            id='my_{}'.format(x),
            type=x,
            placeholder="insert {}".format(x),  # A hint to the user of what can be entered in the control
            minLength=0, maxLength=50,          # Ranges for character length inside input box
            autoComplete='on',
            disabled=False,                     # Disable input box
            readOnly=False,                     # Make input box read only
            required=False,                     # Require user to insert something into input box
            size="20",                          # Number of characters that will be visible inside box
        ) for x in input_types
    ]),

    html.Br(),
    
    html.Button('Add Row',id='add_row',n_clicks=0),
    
    dbc.Row([    
        dbc.Col([html.H5('List',className='text-center'),
        dash_table.DataTable(
                id='table-container_3',
                data=[],
                columns=[{"name":i_3,"id":i_3,'type':'numeric'} for i_3 in MD23.columns],
                style_table={'overflow':'scroll','height':600},
                style_cell={'textAlign':'center'},
                row_deletable=True,
                editable=True)
                ],width={'size':12,"offset":0,'order':1})
            ]),
])


@app.callback(Output('table-container_3', 'data'),
             [Input('my_{}'.format(x),'value')for x in input_types])

def update_data(selected_number, selected_pw, 
                selected_text, selected_tel, 
                selected_email,selected_url,
                selected_search):
    
    data = pd.DataFrame({'Number':[selected_number],
                         'PW':[selected_pw],
                         'Name 1':[selected_text],
                         'Name 2':[selected_tel],
                         'Email':[selected_email],
                         'Web':[selected_url],
                         'Abc':[selected_search]})        
    
    return data.to_dict(orient='records')


# ------------------------------------------------------------------------
if __name__ == '__main__':
    app.run_server(debug=False)

我try 按如下方式添加行,但没有成功:

@app.callback(
    Output('table-container_3', 'data'),
    Input('add_row', 'n_clicks'),
    State('table-container_3', 'data'),
    State('table-container_3', 'columns'))

def add_row(n_clicks, rows, columns):
    if n_clicks > 0:
        rows.append()
    return rows

我真的需要建议来解决这个问题.非常感谢.

推荐答案

特兰

@app.callback(
Output('table-container_3', 'data'),
Input('add_row', 'n_clicks'),
[State('table-container_3', 'data'),
State('table-container_3', 'columns')]+
[State('my_{}'.format(x), 'value') for x in input_types])
def add_row(n_clicks, rows, columns, selected_number, selected_pw,
            selected_text, selected_tel,
            selected_email, selected_url,
            selected_search):

if n_clicks > 0:
    rows.append({c['id']: r for c,r in zip(columns, [selected_number, selected_pw, selected_text, selected_tel, selected_email, selected_url, selected_search])})

return rows

Python相关问答推荐

计算每月过go x年的平均值

为什么使用SciPy中的Distance. cos函数比直接执行其Python代码更快?

如何将 map 数组组合到pyspark中每列的单个 map 中

try 使用tensorFlow.keras.models时optree Import错误

按日期和组增量计算总价值

带有pandas的分区列上的过滤器的多个条件read_parquet

使用Python进行网页抓取,没有页面

如何使用Python中的clinicalTrials.gov API获取完整结果?

当密钥是复合且唯一时,Pandas合并抱怨标签不唯一

提取两行之间的标题的常规表达

我从带有langchain的mongoDB中的vector serch获得一个空数组

使用numpy提取数据块

如何比较numPy数组中的两个图像以获取它们不同的像素

为什么带有dropna=False的groupby会阻止后续的MultiIndex.dropna()工作?

Python键入协议默认值

在np数组上实现无重叠的二维滑动窗口

在ubuntu上安装dlib时出错

Python列表不会在条件while循环中正确随机化'

Plotly Dash Creating Interactive Graph下拉列表

在Python中使用if else或使用regex将二进制数据如111转换为001""