Система меню Python Tkinter. Не удается получить итоговые и отображаемые цены

#python #tkinter #tkinter-text

Вопрос:

Новичок в python, и я пытался создать небольшое меню с помощью Tkinter, моя идея заключается в том, что когда я выбираю элемент из меню, его название отображается на большом экране, а общее количество выбранных элементов отображается на меньшем экране, моя функция называется fireFood. В настоящее время я вижу, что мои цены отображаются в строке, а не суммируются, и я застрял на этом пару дней, надеюсь, кто-нибудь сможет указать мне правильное направление.

 rom tkinter import ttk
import tkinter as tk
root = tk.Tk()
root.geometry('500x300')
root.title('Server Window')
root.wm_resizable(width=False, height=False)

# Create display area for selected items

display = tk.Text(root, height=10, width=30, bg='Orange', bd=4)
display.grid(row=1, column=3)

price_display = tk.Text(root, height=3, width=15, bg='Orange', bd=4)
price_display.grid(row=3, column=3)
#====================== Functions =================================
def fireFood():
    # Every time a new item is selected i want a new total to be calculated and displayed
    global menu
    global price_display
    global display
    global select_option
    total = 0
    prices = []
    # this inserts food item onto display
    display.insert(tk.END,options.get())
    prices.append([options.get(), menu[options.get()]])

    for x in prices:
        total = total   float(x[1])

    # this shows price on lower display
        price_display.insert(tk.END, total)

    total  = float(menu[options.get()])

def addList(arr):
    cost = 0
    arr.remove('n')
    total = [sum(float(x) for x in arr)]
    for x in total:
        cost  = x
    return cost
#======================================================================

# Create a Dictionary of items to be displayed in Combobox
menu = {'fries ':5, 'Burger ':10, 'Pizza ':15, 'Chicken ':8, 'Fish ':7.50}
menu_list = [x for x in menu.keys()]
menu_prices = [y for y in menu.values()]
options = ttk.Combobox(values=menu_list)

# Set default value for the combobox to 'Menu' to function as a pseudo label
options.set('Menu')
options.grid(row=0, column=0)

# Create a button that when pressed will get the value of combobox
select_option = ttk.Button(root, text='Select', command=fireFood)
select_option.grid(row=0, column=1)

root.mainloop()
 

Комментарии:

1. Должно price_display.insert(tk.END, total) ли это быть внутри for цикла? Попробуйте выйти за пределы цикла.

2. Я попробовал, но, к сожалению, это не сработало 🙁

3. Не могли бы вы, пожалуйста, опубликовать какой-нибудь минимальный рабочий код, который мы могли бы протестировать? Отлаживать код проще, когда вы можете его запустить 😀

4. Да, определенно собираюсь сделать это сейчас. Я перепробовал множество реализаций, это моя самая последняя попытка

5. В чем польза от prices переменной? Насколько я понимаю, переход prices = [] к началу сценария почти решил проблему. Не могли бы вы, пожалуйста, попробовать это? Также я заметил, что вы никогда не используете эту addList функцию.

Ответ №1:

Это работает на меня.

 price_display = tk.Text(root, height=3, width=15, bg='Orange', bd=4)
price_display.grid(row=3, column=3)

total = 0

#====================== Functions =================================
def fireFood():
    # Every time a new item is selected i want a new total to be calculated and displayed
    global menu
    global price_display
    global display
    global select_option
    global prices
    global total # make total global
    prices = []
    # this inserts food item onto display
    display.insert(tk.END,options.get())

    # this shows price on lower display
    total  = float(menu[options.get()])
    price_display.delete('1.0', 'end') # delete previous text
    price_display.insert(tk.END, total)
 

Комментарии:

1. Спасибо, Дерек, это решило мою проблему. Еще раз большое спасибо.

2. Счастливое кодирование @Raphael Mapp