Ссылка на значения поля со списком в Tkinter - PullRequest
0 голосов
/ 12 февраля 2020

Я пытаюсь написать код Python, чтобы в основном выполнять функцию sumproduct на основе выбранного элемента и количества выбранного элемента.

Мой код приведен ниже. У меня проблемы со ссылками на значения в выпадающем списке. Функция вычисления - то, где я иду неправильно. Как мне ссылаться на комбинированные списки, которые я ввел в NewWindow? Я добавляю комбинированные списки на страницу, основываясь на количестве выбранных элементов, и все они имеют одинаковые значения, например c.

Например, если я выберу 2 «пиццы» и 1 «CocaCola», тогда код должен печать 33. ((2 * $ 15) + (1 * $ 3))

Это моя ошибка:

Файл "C: \ Users \ aaaaa \ Documents \ pizzamenu.py" строка 41, в подсчете стоимости = fooditems [x] KeyError: 0

>


fooditems = {'pizza' : [15] , 'breadsticks' : [5] ,'wings' : [10],'CocaCola' : [3] ,'brownie' : [2]}
fooditems2 = []
quantity = ['1','2','3','4']



import tkinter as tk
from tkinter import *
from tkinter import ttk

menu = Tk()
menu.geometry('500x300')

check_boxes = {item:tk.IntVar() for item in fooditems}

for item in fooditems:
    cb = tk.Checkbutton(menu, text=item, variable=check_boxes[item], anchor='w', onvalue=1, offvalue=0, width=50)
    cb.pack()

combobox = ttk.Combobox(menu, values=quantity)


def Open():
    New_Window = Toplevel(menu)
    New_Window.geometry('500x300')
    calculateButton = tk.Button(New_Window, text = 'calculate', command=calculate)
    calculateButton.place(x=250,y=250)
    for key, item in check_boxes.items():
        if item.get() == 1:
            fooditems2.append(key)
    for x in range(len(fooditems2)):
        b = Label(New_Window, text=fooditems2[x])
        b.pack()
        combobox = ttk.Combobox(New_Window, values=quantity)
        combobox.pack()
    New_Window.mainloop()

def calculate():
    for x in range(len(fooditems2)):
        #cost = fooditems2[x] * combobox.get()
        cost = fooditems[x]
        print(cost)

confirmButton = tk.Button(menu, text = 'Confirm', command=Open)
confirmButton.place(x=250,y=250)



menu.mainloop()

1 Ответ

1 голос
/ 12 февраля 2020

Ошибка связана с тем, что fooditems является словарем. Чтобы добиться цели, вам нужно найти способ, которым calculate() может ссылаться на цену выбранных предметов и количество предметов (combobox). Мое предложение поместить эту информацию в список fooditems2:

def Open():
    New_Window = Toplevel(menu)
    New_Window.geometry('500x300')
    calculateButton = tk.Button(New_Window, text = 'calculate', command=calculate)
    calculateButton.place(x=250,y=250)
    fooditems2.clear()
    for key, item in check_boxes.items():
        if item.get() == 1:
            Label(New_Window, text=key).pack()
            combobox = ttk.Combobox(New_Window, values=quantity)
            combobox.pack()
            # save the price and the combobox
            fooditems2.append([fooditems[key][0], combobox])
    # make window modal
    New_Window.grab_set()
    New_Window.wait_window(New_Window)

def calculate():
    total = 0
    for price, cb in fooditems2:
        cost = price * int(cb.get())
        print(cost)
        total += cost
    print('total:', total)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...