当您单击返回菜单按钮时,使 tkinter treeview 记住上传的 Excel 文件

问题描述 投票:0回答:0

我想在 tkinter 中编写返回菜单按钮的代码。因此,在我当前编写的代码中,我将 menu_widget_frame 设置为具有“SVC”、“McDonalds”和“Overall SOH 数据”的组合框。对于组合框的每个选择,我都创建了一个函数。对于 SVC 数据,用户必须通过浏览和上传 Excel 文件到树视图来输入数据。我的 svc 数据大致是这样的:

def SVC_data():
global overall_data_svc_table, Excel_file_button_svc, Excel_file_label_svc, svc_predict_stock_level_button, overall_data_svc_table, go_back_to_menu_button_svc, save_file_button_svc
side_bar_svc_data = ttk.Frame(tab2)
side_bar_svc_data.pack(side='left')

svc_data_treeview_frame = ttk.Frame(tab2)
svc_data_treeview_frame.pack(side='right')

columns_data_svc = ('Dates', 'Frozen Quantity', 'Chiller Quantity', 'Dry Quantity')
overall_data_svc_table = ttk.Treeview(svc_data_treeview_frame, show="headings", columns=columns_data_svc)
overall_data_svc_table.pack(anchor='e')

overall_data_svc_table.column(0, width=130)
overall_data_svc_table.column(1, width=130)
overall_data_svc_table.column(2, width=130)
overall_data_svc_table.column(3, width=130)

overall_data_svc_table.heading(0, text="Dates")
overall_data_svc_table.heading(1, text="Frozen Quantity")
overall_data_svc_table.heading(2, text="Chiller Quantity")
overall_data_svc_table.heading(3, text="Dry Quantity")

def upload_excel_file_():
    global file_svc_data
    file_svc_data = filedialog.askopenfilename(filetypes=[("Excel file", '.xlsx')])

    #The global keyword is used to make the df object available to all functions and scopes within the current module or file.
    global df_svc_data

    #file name has to be in .xlsx
    #example df = pd.readexcel('C:\Users\Ron\Desktop\products.xlsx')
  
    df_svc_data = pd.read_excel(file_svc_data)
    df_svc_data['Dates'] = pd.to_datetime(df_svc_data['Dates']).dt.strftime('%d-%B-%Y')
    for iid, dates in zip(overall_data_svc_table.get_children(), df_svc_data['Dates']):
        overall_data_svc_table.set(iid, 'Dates', dates)

    #>>>>create a table to show the file forecast inbound<<<<
    list_values = list(df_svc_data.values)
    for value_tuple in list_values[1:]:
        overall_data_svc_table.insert("", 'end', values=value_tuple)
    return None

#create a button & a label to upload Excel file button 
Excel_file_label_svc = ttk.Label(side_bar_svc_data, text='Browse and Upload Excel File')
Excel_file_label_svc.pack(anchor='w')
Excel_file_button_svc = ttk.Button(side_bar_svc_data, text='Display Excel File', command=upload_excel_file_)
Excel_file_button_svc.pack(anchor='w', padx=0, pady=5, expand=1, fill='both')

def predict_stock_level_svc_button_clicked():
    get_latest_dates_value = str(df_svc_data['Dates'].tail(1).values[0])
    latest_date = datetime.datetime.strptime(get_latest_dates_value, "%d-%B-%Y")

    global get_latest_chiller_value_svc, get_latest_dry_value_svc, get_latest_frozen_value_svc

    get_latest_frozen_value_svc = pd.to_numeric(df_svc_data['Frozen Quantity'].tail(1).values[0], downcast='float')
    get_latest_dry_value_svc = pd.to_numeric(df_svc_data['Dry Quantity'].tail(1).values[0], downcast='float')
    get_latest_chiller_value_svc = pd.to_numeric(df_svc_data['Chiller Quantity'].tail(1).values[0], downcast='float')

    for delta in range(1, 367):
        future_dates_svc = latest_date + datetime.timedelta(days=delta)
        future_dates_svc_formatted = future_dates_svc.strftime('%d-%B-%Y')
        total_latest_data = future_dates_svc_formatted, get_latest_frozen_value_svc, get_latest_dry_value_svc, get_latest_chiller_value_svc
        overall_data_svc_table.insert("", 'end', values=total_latest_data)

    return None

#create a svc predict button to calculate stock level
svc_predict_stock_level_button = ttk.Button(side_bar_svc_data, text='Predict Stock Level', command=predict_stock_level_svc_button_clicked)
svc_predict_stock_level_button.pack(anchor='w', pady=5, expand=1, fill='both')

def save_file_button_selected():
    for child in overall_data_svc_table.get_children():
        row = overall_data_svc_table.item(child)['values']
        df_svc_data.at(row)
        df_svc_data.to_excel(file_svc_data)
    
    return None

def go_back_to_menu_button_selected():
    #call function to hide all widget in the window svc
    side_bar_svc_data.pack_forget()
    svc_data_treeview_frame.pack_forget()
    #go back to the store name menu selection
    menu_widget_frame.pack()

save_file_button_svc = ttk.Button(side_bar_svc_data, text='Save File to Excel', command=save_file_button_selected)
save_file_button_svc.pack(anchor='w', side='left', padx=3, pady=3)

go_back_to_menu_button_svc = ttk.Button(side_bar_svc_data, text='Back to Menu', command=go_back_to_menu_button_selected)
go_back_to_menu_button_svc.pack(anchor='n', side='right', pady=3, padx=1, expand=1)

return None

在 SVC 数据中,我创建了一个返回菜单按钮,它可以显示菜单窗口。如果用户想返回查看他们输入到树视图的 excel 文件,我想知道返回菜单按钮的工作原理。你怎么能这样做?到目前为止,我所做的是尝试返回 menu_widget_frame.bind 所有事件。并使用这个

 #Store the uploaded data in a separate variable
global uploaded_svc_data
uploaded_svc_data = df_svc_data

def go_back_to_menu_button_selected():
    # Hide the side bar and treeview frames
    side_bar_svc_data.pack_forget()
    svc_data_treeview_frame.pack_forget()
    
    # Show the menu widget frame
    menu_widget_frame.pack()

    # Check if there is uploaded data and display it in the treeview
    if uploaded_svc_data is not None:
        for iid, dates in zip(overall_data_svc_table.get_children(), uploaded_svc_data['Dates']):
            overall_data_svc_table.set(iid, 'Dates', dates)

        list_values = list(uploaded_svc_data.values)
        for value_tuple in list_values[1:]:
            overall_data_svc_table.insert("", 'end', values=value_tuple)
python tkinter return
© www.soinside.com 2019 - 2024. All rights reserved.