python - 如何从字典中总结总数
问题描述
我正在尝试制作一个与在商店接受订单相关的程序。整个代码是关于下订单的页面,然后创建标签列表。一切都做得很好,但是我无法获得总价格。这是我的代码:
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
我在这里先向您的帮助表示感谢。
更新:我认为代码不擅长处理字典,因为每次我尝试使用新代码来汇总价格时,它总是总结输入一次的数字,并在插入新条目后重置。任何事物。请注意,我仍然是 python 的学习者/学生,因此代码中的任何工作更改都是可以接受的。
更新#2 当你们去购物时,您会购买多件商品,然后商品清单会显示总金额。我正在努力做到这一点。随意根据您的需要更改代码,因为我是一个学习者,我犯了很多次错误。谢谢大家
解决方案
目前您创建的局部变量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()
推荐阅读
- excel - 使用 VBA 删除前导和尾随空格,但在字符串中保留空格
- git - Git 和 Bitbucket:推送时未经授权
- reactjs - 列表项编辑值中的 ownProps 消失
- pattern-matching - 如何转换结果?
- javascript - 从后台脚本获取数据到 popup.html
- java - 如何修复这个空的 OTP 编辑文本错误?
- javascript - 如何将 HTML 表格添加到我的数据并保留 Google 表格格式
- javascript - 当鼠标悬停在 Mapbox 的 Popup 上时,Mousemove 停止触发
- python - 如何阻止程序每天运行一次以上?
- c++ - 在 for 循环中使用变量,导致段错误