как подвести итог из словаря - PullRequest
0 голосов
/ 28 апреля 2019

Я пытаюсь составить программу, связанную с приемом заказов в магазине.Весь код относится к странице, где принимается заказ, а затем создается список меток.Все сделано хорошо, однако я не могу получить общее количество цен.Вот мой код:

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

Спасибо за помощь заранее.

update: Я думаю, что код плохо справляется со словарем, потому что каждый разЯ пытаюсь использовать новый код для суммирования цен, он всегда суммирует диджиты, которые были введены один раз, и сбрасывается после вставки новой записи.что-нибудь.обратите внимание, что я все еще учусь на Python, поэтому любые рабочие изменения в коде будут приемлемы.

update # 2 , когда вы, ребята, отправляетесь за покупками, вы покупаете несколькопредметы, а затем список предметов выходит с общей суммой.Я пытаюсь сделать именно это.не стесняйтесь изменять код в соответствии с вашими потребностями, так как я учусь и часто допускаю ошибки.спасибо всем

Ответы [ 3 ]

0 голосов
/ 28 апреля 2019

Действительно просто сделать с sum:

total = sum(int(value) for key, value in order.items())
0 голосов
/ 28 апреля 2019

В настоящее время вы создаете локальную переменную 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()

enter image description here

0 голосов
/ 28 апреля 2019

Я бы просто использовал понимание списка, чтобы получить все числа в списке и сложить их

# 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])
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...