Получая имя на кнопках вместо первой буквы, вы должны задать имя всей строке, а не только первой позиции:
button = ttk.Button(master, text=dat, command ...
(instead of dat[0])
для каждой из категорий: еда, чайи фаст фуд.
Я не понимаю, как вы хотите, чтобы это работало в конце.Вы хотите, чтобы квитанция была обновлена для каждого продукта или только в конце.Функция update_count()
выглядит очень странно.
Я бы порекомендовал использовать dict для хранения товаров и цен.Это облегчит поиск цен.Пока приложение достаточно маленькое, я думаю, что глобальная переменная будет предпочтительнее.
products = {'Soup': 2.40, 'Fish': 3.10, 'Beef': 3.55, 'Pizza': 2.70}
Посмотрите на приведенный ниже пример кода, попробуйте запустить его и подумайте, как вы хотите, чтобы остальные работали.Следует ли обновлять квитанцию каждый раз, когда вы нажимаете кнопку?Нужно ли заказывать чек каким-либо образом?Что делать, если вы хотите удалить что-то из рецепта?
from tkinter import *
from tkinter import ttk
#import sqlite3
import time
import datetime
import random
variable = 1
bttn_clicks=0
button_dict = {}
button_dic = {}
#conn = sqlite3.connect('hoteldb.db')
#c = conn.cursor()
products = {} # Dictionary of products and prices
tally = [] # List of ordered products
def showqurec():
global button, data2
data2 = readqurec()
for index, dat in enumerate(data2):
button = ttk.Button(master, text=dat, command=lambda dat=dat: update_count(dat))
button.grid(row=index+1, column=0, padx=0, pady=0)
button_dict[dat] = button
def showqado():
global button, data2
data2 = readqado()
for index, dat in enumerate(data2):
button = ttk.Button(master, text=dat, command=lambda dat=dat: update_count(dat))
button.grid(row=index+1, column=1, pady=0, padx=0)
button_dict[dat] = button
def showcasho():
global button, data2
data2 = readcasho()
for index, dat in enumerate(data2):
button = ttk.Button(master, text=dat, command=lambda dat=dat: update_count(dat))
button.grid(row=index+1, column=2,padx=0, pady=0)
button_dict[dat] = button
def readfromdatabase(): # This function is never called...
return None
def readqurec(): # Get Meal from database
meal = {'Soup': 2.40, 'Fish': 3.10, 'Beef': 3.55, 'Pizza': 2.70}
products.update(meal)
return meal
def readqado(): # Get Tea from database
tea = {'Tea': 1.20, 'Coffee': 1.00, 'Soda': 1.65}
products.update(tea)
return tea
def readcasho(): # Get Fast food from database
fast_food = {'Hamburger': 1.80,'Hot dog': 1.45,'Pasta': 1.65}
products.update(fast_food)
return fast_food
def update_count(x):
global bttn_clicks,my_text,price
purchase = [x,products[x]] # Get the product and price
tally.append(purchase) # Add this purchase to the tally
print(purchase)
# Leaving the rest of the function as is ...
my_text=StringVar()
for name in data2:
my_text = button_dict[x].cget('text')
bttn_clicks += 1
def Receipt():
txtReceipt.delete("1.0", "4.0")
x = random.randint(10908, 500876)
randomRef = str(x)
Receipt_Ref.set("BILL" + randomRef)
txtReceipt.insert("1.0", 'Receipt Ref: \t\t\t'+Receipt_Ref.get()+"\t\t"+DateofOrder.get()+"\n")
txtReceipt.insert("2.0", 'Items\t\t'+'Quantity\t\t\t'+"Price \n\n")
if variable !=0:
txtReceipt.insert(END, str(my_text)+'\t\t'+str(bttn_clicks)+'\t\t\t'+""+str(bttn_clicks*3)+"\n")
master=Tk()
master.geometry('630x350+100+200')
master.title('Records')
Label = Button(master, text="meal", width=10,command=showqurec)
Label.grid(row=0, column=0)
BMILabel = Button(master, text="tea", width=10,command=showqado)
BMILabel.grid(row=0, column=1)
stateLabel = Button(master, text="fast food", width=10,command=showcasho)
stateLabel.grid(row=0, column=2)
lblReceipt = Button(master,text="Get Receipt:",anchor='w',command=Receipt)
lblReceipt.grid(row=0,column=4,sticky=W)
txtReceipt = Text(master,bg="white",width=47,height=17.5)
txtReceipt.grid(row=1,column=4,rowspan=4,columnspan=40)
Receipt_Ref=StringVar()
DateofOrder = StringVar()
master.mainloop()