我想在 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)