我正在尝试制作与在商店下订单有关的程序。整个代码是关于下订单的页面的,然后创建标签列表。一切都做得很好,但是我无法获得全部价格。这是我的代码:
def blnclick():
n=0
uprice = price.get()
uitem = item.get()
order = {'items': uitem, 'price': uprice}
lab = order['items']
lab1 = order['price']
total = int(lab1)
c = Canvas(canvas_frme, bg='white', bd=10, width=10, height=50)
c.pack()
for values in order:
Label(c, text=lab, bg='white', font=('candara', 19)).grid(row=n, column=0)
Label(c, text=lab1, bg='white', font=('candara', 19)).grid(row=n, column=1)
totSum.set(total)
total = total+total
非常感谢您的帮助。
更新:我认为代码并不擅长处理字典,因为每次我尝试使用新代码来汇总价格时,它总会汇总一次输入的Didgit,然后插入新条目后重置。任何东西。 请注意,我仍然是python的学习者/学生,因此可以接受代码中的任何有效更改。
更新#2 ,当您去购物时,您购买了多个商品,然后列出了商品总金额。我正试图做到这一点。我是一名学习者,随时可以根据您的需要更改代码,而且我犯了很多次错误。谢谢大家
答案 0 :(得分:0)
我只会使用列表推导来获取列表中的所有数字并将它们相加
# sample dict
d = {"one":1, "two":2, "three":3}
# for each key, get it's "price", sum list
x = sum([d[k] for k in d])
答案 1 :(得分:0)
使用sum
真的很简单:
total = sum(int(value) for key, value in order.items())
答案 2 :(得分:0)
当前,您创建的本地变量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()