ткинтер множит цену из таблицы - PullRequest
0 голосов
/ 14 мая 2018

Я делаю простую программу для системы управления кафе, которая считывает названия продуктов в виде кнопок из таблицы, а также хочу прочитать цену продуктов из таблицы и умножить ее на количество нажатий кнопок, а затем сохранить их в видеText как я могу это сделать, пожалуйста

это изображение, которое показывает, где находятся два основных вопроса

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()

def showqurec():
   global button,data2
   data2 = readqurec()
   for index, dat in enumerate(data2):
     button= ttk.Button(master, text=dat[0],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[0],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[0],command=lambda dat=dat:update_count(dat))
       button.grid(row=index+1, column=2,padx=0, pady=0)
       button_dict[dat] = button



def readfromdatabase():
   cur.execute("SELECT qureec.name,qado.name,casho.name FROM qureec,qado,casho")
   return cur.fetchall()
def readqurec():
   cur.execute("SELECT name FROM qureec ")
   return cur.fetchall()

def readqado():
    cur.execute("SELECT name FROM qado ")
    return cur.fetchall()

def readcasho():
    cur.execute("SELECT name FROM casho ")
    return cur.fetchall()


def update_count(x):
    global bttn_clicks,my_text,price
    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()

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

1 Ответ

0 голосов
/ 15 мая 2018

Получая имя на кнопках вместо первой буквы, вы должны задать имя всей строке, а не только первой позиции:

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