首页 > 解决方案 > 如何从字典中总结总数

问题描述

我正在尝试制作一个与在商店接受订单相关的程序。整个代码是关于下订单的页面,然后创建标签列表。一切都做得很好,但是我无法获得总价格。这是我的代码:

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 当你们去购物时,您会购买多件商品,然后商品清单会显示总金额。我正在努力做到这一点。随意根据您的需要更改代码,因为我是一个学习者,我犯了很多次错误。谢谢大家

标签: pythonpython-3.xtkinter

解决方案


目前您创建的局部变量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()

在此处输入图像描述


推荐阅读