В настоящее время вы создаете локальную переменную total
, которая не может сохранить старое значение.
Кроме того, вы присваиваете новое значение total = int(lab1)
, чтобы оно удаляло старое значение.
Вам нужна глобальная переменная (global total
), чтобы сохранить общее значение все время.
И затем вы можете добавить новое значение к total
, которое сохраняет старое значение.
Чтобы добавить виджет на холст, вы должны будете использовать canvas_window((x,y), widget)
.
Мы используем pack()
/ grid()
для добавления виджетов в другой виджет, например Frame
.Теперь у вас есть беспорядок.
Я использую Frame
и пропускаю не важные параметры, такие как цвет и шрифт.
#global variable
total = 0 # value as start
# to keep all orderde items
#order = []
# to display total value
#total_label = Label(root, text='')
#total_label.pack()
def blnclick():
uprice = price.get()
uitem = item.get()
global total
total += int(uprice) # add to global value
# display new total
#total_label['text'] = str(total)
# add ordered item to list
#order.append({'item': uitem, 'price': uprice})
frame = Frame(canvas_frme)
frame.pack()
l = Label(frame, text=uprice)
l.grid(row=0, column=0)
l = Label(frame, text=uitem)
l.grid(row=1, column=1)
РЕДАКТИРОВАТЬ:
Полная работапример
import tkinter as tk
# --- functions ---
def on_button_add():
uprice = price_entry.get()
uitem = item_entry.get()
global total
total += int(uprice) # add to class value
# display new total
total_label['text'] = str(total)
# add ordered item to list
order.append({'item': uitem, 'price': uprice})
print('full order:', order)
print('total:', total)
number = len(order)
l = tk.Label(frame_order, text=uitem)
l.grid(row=number, column=0)
l = tk.Label(frame_order, text=uprice)
l.grid(row=number, column=1)
# --- main ---
# values at start
total = 0
order = []
root = tk.Tk()
#--- entry for new item ---
l = tk.Label(root, text='Item:')
l.grid(row=0, column=0)
item_entry = tk.Entry(root)
item_entry.grid(row=0, column=1)
l = tk.Label(root, text='Price:')
l.grid(row=1, column=0)
price_entry = tk.Entry(root)
price_entry.grid(row=1, column=1)
button = tk.Button(root, text='ADD', command=on_button_add)
button.grid(row=2, column=0, columnspan=2)
#--- frame with order ---
frame_order = tk.Frame(root)
frame_order.grid(row=3, column=0, columnspan=2)
l = tk.Label(frame_order, text="Items")
l.grid(row=0, column=0)
l = tk.Label(frame_order, text="Prices")
l.grid(row=0, column=1)
#--- total ---
# to display total value
l = tk.Label(root, text='Total:')
l.grid(row=4, column=0)
# to display total value
total_label = tk.Label(root, text='')
total_label.grid(row=4, column=1)
root.mainloop()
