我是一名初学者,我正在使用 Tkinter 为 DIY 商店创建一个原型系统,作为我任务的一部分。该应用程序的工作原理是填写一份简单的调查来创建订单。单击“输入数据”按钮后,页面底部应显示您的选择结果,包括总价。
我需要一些关于如何编写系统计算部分的建议,从def total():
在代码中,但计算部分位于total_length
,这就是我收到“未定义它”错误的地方错误信息 https://i.stack.imgur.com/2je37.png(https://i.stack.imgur.com/w5lZg.png https://i.stack.imgur.com/w5lZg.png).
我不知道如何通过它。我认为它是由我的计算定义的total_length = wallpaper_length_cost * 0.5
.
import tkinter as tk
from tkinter import filedialog
from tkinter import ttk
def display_wallpaper_prints():
window = tk.Toplevel()
window.title("View Wallpaper prints")
window.geometry("400x400")
image_path = "Picture1A.png"
img = tk.PhotoImage(file=image_path)
label = ttk.Label(window, image=img)
label.image = img
label.pack(side="top", pady=10)
def enter_data():
full_name = "Name: " + first_name_field.get() + " " + surname_field.get()
name_label.config(text=full_name)
name_label.grid(column=0, row=4, columnspan=2)
employeeID = "Employee ID: " + employeeID_field.get()
ID_label.config(text=employeeID)
ID_label.grid(column=6, row=4, columnspan=2)
wallpaper_length = "Wallpaper length: " + wallpaper_length_combobox.get()
wl_label.config(text=wallpaper_length)
wl_label.grid(column=0, row=5, columnspan=2)
wallpaper_selection = "Wallpaper selection: " + wallpaper_selection_combobox.get()
ws_label.config(text=wallpaper_selection)
ws_label.grid(column=6, row=5, columnspan=2)
wallpaper_paste = "Wallpaper paste: " + wallpaper_paste_selection_combobox.get()
wp_label.config(text=wallpaper_paste)
wp_label.grid(column=0, row=6, columnspan=2)
extras = "Extras: " + extras_selection_combobox.get()
extras_label.config(text=extras)
extras_label.grid(column=6, row=6, columnspan=2)
lining_paper = "Lining: " + lining_paper_selection_combobox.get()
lining_paper_label.config(text=lining_paper)
lining_paper_label.grid(column=0, row=7, columnspan=2)
print(full_name, employeeID)
print(wallpaper_length, wallpaper_selection)
print(extras, wallpaper_paste, lining_paper)
def total_cost():
wallpaper_per_metre_cost = 0
if wallpaper_selection_combobox.get() == "Option A (30p per metre)":
wallpaper_per_metre_cost = 0.30
elif wallpaper_selection_combobox.get() == "Option B (60p per metre)":
wallpaper_per_metre_cost = 0.60
wallpaper_length_cost = 0
if wallpaper_length_combobox.get() == "10 metres":
wallpaper_length_cost = 10
elif wallpaper_length_combobox.get() == "15 metres":
wallpaper_length_cost = 15
elif wallpaper_length_combobox.get() == "20 metres":
wallpaper_length_cost = 20
elif wallpaper_length_combobox.get() == "25 metres":
wallpaper_length_cost = 25
extras_per_metre_cost = 0
if extras_selection_combobox == "Foil (12p per metre)":
extras_per_metre_cost = 0.12
elif extras_selection_combobox == "Glitter (18p per metre)":
extras_per_metre_cost = 0.18
elif extras_selection_combobox == "Embossing (6p per metre)":
extras_per_metre_cost = 0.06
lining_paper_cost = 0
if lining_paper_selection_combobox == "Yes, £7.63 per roll":
lining_paper_cost = 7.63
elif lining_paper_selection_combobox == "No":
lining_paper_cost = 0
wallpaper_paste_cost = 0
if wallpaper_paste_selection_combobox == "Yes, £13.99 per tub":
wallpaper_paste_cost = 13.99
elif wallpaper_paste_selection_combobox == "No":
wallpaper_paste_cost = 0
total_length = wallpaper_length_cost.get() * 0.5
wallpaper_total = wallpaper_per_metre_cost * total_length
extras_total = extras_per_metre_cost * wallpaper_length_cost
total_cost = wallpaper_total + extras_total + wallpaper_paste_cost + lining_paper_cost
total_price = "Total price: £" + total_cost.get()
total_price_label.config(text=total_price)
total_price_label.grid(column=0, row=10, columnspan=2)
print(total_length)
print(wallpaper_total)
print(extras_total)
print(total_price)
window = tk.Tk()
window.title("Wallpapering with Sally")
frame = tk.Frame(window)
frame.pack()
#Customer info details
customer_info_frame = tk.LabelFrame(frame, text="Customer details")
customer_info_frame.grid(row= 0, column= 0, padx= 30, pady= 30)
first_name_label = tk.Label(customer_info_frame, text= "First Name")
first_name_label.grid(row= 0, column= 0)
surname_label = tk.Label(customer_info_frame, text= "Surname")
surname_label.grid(row= 0, column= 2)
first_name_field = tk.Entry(customer_info_frame)
surname_field = tk.Entry(customer_info_frame)
first_name_field.grid(row= 0, column= 1)
surname_field.grid(row= 0, column= 3)
employeeID_label = tk.Label(customer_info_frame, text= "Employee ID")
employeeID_label.grid(row= 1, column= 0)
employeeID_field = tk.Entry(customer_info_frame)
employeeID_field.grid(row= 1, column= 1)
for widget in customer_info_frame.winfo_children():
widget.grid_configure(padx=30, pady= 30)
#Wallpaper form
wallpaper_frame = tk.LabelFrame(frame)
wallpaper_frame.grid(row=2, column=0)
#Wallpaper Legnth
wallpaper_length_label = tk.Label(wallpaper_frame, text= "How many metres of wallpaper would you like?")
wallpaper_length_combobox = ttk.Combobox(wallpaper_frame, values=["10 metres","15 metres","20 metres","25 metres"])
wallpaper_length_label.grid (row= 1, column= 0, pady= 10)
wallpaper_length_combobox.grid (row= 2, column= 0)
#Wallpaper Selection
wallpaper_selection_label = tk.Label(wallpaper_frame, text= "Which wallpaper would you like?")
wallpaper_selection_combobox = ttk.Combobox(wallpaper_frame, values=["Option A (30p per metre)","Option B (60p per metre)"])
wallpaper_selection_label.grid(row= 3, column= 0, sticky= "news", padx= 15, pady= 10)
wallpaper_selection_combobox.grid(row= 4, column= 0)
#Select Extras
extras_selection = tk.Label(wallpaper_frame, text= "Would you like any of the extras below?")
extras_selection_combobox = ttk.Combobox(wallpaper_frame, values= ["Foil (12p per metre)", "Glitter (18p per metre)", "Embossing (6p per metre)"])
extras_selection.grid(row= 5, column= 0, sticky= "news", padx= 15, pady= 10)
extras_selection_combobox.grid(row= 6, column= 0)
#lining paper combobox
lining_paper_selection = tk.Label(wallpaper_frame, text= "Do you require Lining paper? (20m rolls for £7.63)")
lining_paper_selection_combobox = ttk.Combobox(wallpaper_frame, values=["Yes, £7.63 per roll", "No"])
lining_paper_selection.grid(row= 7, column= 0, sticky= "news", padx= 15, pady= 10)
lining_paper_selection_combobox.grid(row= 8, column= 0)
#wallpaper paste selection
wallpaper_paste_selection = tk.Label(wallpaper_frame, text= "Do you require wallpaper paste? (10kg ready-mixed tubs)")
wallpaper_paste_selection_combobox = ttk.Combobox(wallpaper_frame, values=["Yes, £13.99 per tub", "No"])
wallpaper_paste_selection.grid(row= 9, column= 0, pady= 10, padx= 10)
wallpaper_paste_selection_combobox.grid (row=10, column= 0)
#enter data button
enter_data_button = ttk.Button(frame, text= "Enter Data", command= enter_data)
enter_data_button.grid(row= 3, column= 0, sticky= "news", padx= 20, pady= 20)
#wallpaper_prints_button
wallpaper_prints_button = ttk.Button(wallpaper_frame, text= "View wallpaper prints", command= display_wallpaper_prints)
wallpaper_prints_button.grid(row= 3, column= 1, pady= 10)
final_frame = tk.LabelFrame(frame)
final_frame.grid(row=4, column=0)
name_label = tk.Label(final_frame)
ID_label = tk.Label(final_frame)
wl_label = tk.Label(final_frame)
ws_label = tk.Label(final_frame)
wp_label = tk.Label(final_frame)
extras_label = tk.Label(final_frame)
lining_paper_label = tk.Label(final_frame)
total_price_label = tk.Label(final_frame)
window.mainloop()