Python: Tkinter

0

Jak w tym kodzie można zastosować klasy, w którym momencie (w tym jakieś dziedziczenie)? Czy można dodać jakiś wyjątek i żeby był on wyświetlany w jakimś polu np. dzielenie przez 0 (Error) ? I jeszcze jedno pytanie czy można dodać aby wyświetlało nam pieniądze jakie mamy, żeby wiedzieć ile można wydać. Wybaczcie za taki opis ,ale jestem totalnie zielony w Pythonie i nie wiem jak się za to zabrać, jak ktoś wie jak to zrobić i mógłby rozpisać to bym był bardzo wdzięczny :)

from tkinter import*
import random
import time
import tkinter as tk
from tkinter import font as tkfont

root = Tk()
root.geometry("1366x768+0+0")
root.title("System zarządzania sklepem")
text_Input = StringVar()
operator = ""
mojFont = tkfont.Font(family='arial', size=16, weight='bold')
root.option_add ("* Font", mojFont)

 
Tops = Frame (root, width = 1366,height = 50, bg= "red", relief=SUNKEN)
Tops.pack(side=TOP)
 
f1 = Frame (root, width = 800,height = 700, relief=SUNKEN)
f1.pack(side=LEFT)
 
f2 = Frame (root, width = 300,height = 700, relief=SUNKEN)
f2.pack(side=RIGHT)
#Czas
localtime = time.asctime(time.localtime(time.time()))
#Informacje
lblInfo = Label(Tops, font = ("Helvetica", 50, "bold"), text = "System zarządzania sklepem", fg = "Steel Blue", bd = 0, anchor = "w")
lblInfo.grid(row = 0, column = 0)
 
lblInfo = Label(Tops, font = mojFont,text = localtime, fg = "Steel Blue", bd = 0, anchor = "w")
lblInfo.grid(row = 1, column = 0)
#Kalkulator
 
def btnClick(numbers):
    global operator
    operator = operator + str(numbers)
    text_Input.set(operator)
 
def btnClearDisplay():
    global operator
    operator = ""
    text_Input.set("")
def btnEqualsInput():
    global operator
    sumup = str(eval(operator))
    text_Input.set(sumup)
    operator = ""
def Ref():
    x = random.randint(10908, 500876)
    randomRef = str(x)
    rand.set(randomRef)
    CoF = float(Frytki.get())
    CoC = float(Cola.get())
    CoL = float(Lazania.get())
    CoH = float(Hamburger.get())
    CoP = float(Pieczonykurczak.get())
    CoPizza = float(Pizza.get())
 
    CostofFrytki = CoF * 50.00
    CostofCola = CoC * 15.00
    CostofLazania = CoL * 38.87
    CostofHamburger = CoH * 25.00
    CostofPieczonykurczak = CoP * 88.69
    CostofPizza = CoPizza * 63.99
 
    CostofPosilek = "zł", str('%.2f' % (CostofFrytki + CostofCola + CostofLazania + CostofHamburger+ CostofPieczonykurczak + CostofPizza))
 
    PayTax = ((CostofFrytki + CostofCola + CostofLazania + CostofHamburger+ CostofPieczonykurczak + CostofPizza) * 0.23)
 
    TotalCost = (CostofFrytki + CostofCola + CostofLazania + CostofHamburger+ CostofPieczonykurczak + CostofPizza)
 
    Ser_wis = ((CostofFrytki + CostofCola + CostofLazania + CostofHamburger+ CostofPieczonykurczak + CostofPizza)/99)
 
    Serwis = "zł", str('%.2f' % Ser_wis)
 
    OverallCost = "zł", str('%.2f' % (PayTax + TotalCost + Ser_wis))
    PaidTax = "zł", str('%.2f' % PayTax)
    Koszt.set(CostofPosilek)
    Podatek.set(PaidTax)
    Sumaczesciowa.set(CostofPosilek)
    Kosztcalkowity.set(OverallCost)
    Serwis_Charge.set(Serwis)
 
def qExit():
    root.destroy()
 
def Reset():
    rand.set("")
    Frytki.set("")
    Hamburger.set("")
    Lazania.set("")
    Pizza.set("")
    Pieczonykurczak.set("")
    Cola.set("")
    Kosztcalkowity.set("")
    Koszt.set("")
    Podatek.set("")
    Sumaczesciowa.set("")
    Serwis_Charge.set("")    
 
txtDisplay = Entry(f2, font = mojFont,textvariable=text_Input, bd = 30, insertwidth = 4, bg = "red", justify = "right")
txtDisplay.grid(columnspan=4)
 
btn7 = Button(f2, padx = 16, pady = 16, bd = 8, fg = "black", font = mojFont, text = "7", bg = "red", command = lambda: btnClick(7)).grid (row= 2, column = 0)
btn8 = Button(f2, padx = 16, pady = 16, bd = 8, fg = "black", font = mojFont, text = "8", bg = "red", command = lambda: btnClick(8)).grid (row= 2, column = 1)
btn9 = Button(f2, padx = 16, pady = 16, bd = 8, fg = "black", font = mojFont, text = "9", bg = "red", command = lambda: btnClick(9)).grid (row= 2, column = 2)
Addition = Button(f2, padx = 16, pady = 16, bd = 8, fg = "black", font = mojFont, text = "+", bg = "red", command = lambda: btnClick("+")).grid (row= 2, column = 3)
btn4 = Button(f2, padx = 16, pady = 16, bd = 8, fg = "black", font = mojFont, text = "4", bg = "red", command = lambda: btnClick(4)).grid (row= 3, column = 0)
btn5 = Button(f2, padx = 16, pady = 16, bd = 8, fg = "black", font = mojFont, text = "5", bg = "red", command = lambda: btnClick(5)).grid (row= 3, column = 1)
btn6 = Button(f2, padx = 16, pady = 16, bd = 8, fg = "black", font = mojFont, text = "6", bg = "red", command = lambda: btnClick(6)).grid (row= 3, column = 2)
Subtraction = Button(f2, padx = 16, pady = 16, bd = 8, fg = "black", font = mojFont, text = "-", bg = "red", command = lambda: btnClick("-")).grid (row= 3, column = 3)
btn1 = Button(f2, padx = 16, pady = 16, bd = 8, fg = "black", font = mojFont, text = "1", bg = "red", command = lambda: btnClick(1)).grid (row= 4, column = 0)
btn2 = Button(f2, padx = 16, pady = 16, bd = 8, fg = "black", font = mojFont, text = "2", bg = "red", command = lambda: btnClick(2)).grid (row= 4, column = 1)
btn3 = Button(f2, padx = 16, pady = 16, bd = 8, fg = "black", font = mojFont, text = "3", bg = "red", command = lambda: btnClick(3)).grid (row= 4, column = 2)
Multiply = Button(f2, padx = 16, pady = 16, bd = 8, fg = "black", font = mojFont, text = "*", bg = "red", command = lambda: btnClick("*")).grid (row= 4, column = 3)
btn0 = Button(f2, padx = 16, pady = 16, bd = 8, fg = "black", font = mojFont, text = "0", bg = "red", command = lambda: btnClick(0)).grid (row= 5, column = 0)
btnClear = Button(f2, padx = 16, pady = 16, bd = 8, fg = "black", font = mojFont, text = "C", bg = "red", command = btnClearDisplay).grid (row= 5, column = 1)
btnEquals = Button(f2, padx = 16, pady = 16, bd = 8, fg = "black", font = mojFont, text = "=", bg = "red", command = btnEqualsInput).grid (row= 5, column = 2)
Division = Button(f2, padx = 16, pady = 16, bd = 8, fg = "black", font = mojFont, text = "/", bg = "red", command = lambda: btnClick("/")).grid (row= 5, column = 3)
 
# Restauracja
rand = StringVar()
Frytki = StringVar()
Hamburger = StringVar()
Lazania = StringVar()
Pizza = StringVar()
Pieczonykurczak = StringVar()
Cola = StringVar()
Serwis_Charge = StringVar()
Kosztcalkowity = StringVar()
Koszt = StringVar()
Podatek = StringVar()
Sumaczesciowa = StringVar()
 
lblReferencje = Label(f1, font=mojFont, text= "Numer zamówienia", bd = 16, anchor = "w")
lblReferencje.grid(row= 0, column= 0)
txtReferencje = Entry(f1, font=mojFont, textvariable = rand, bd = 10, insertwidth=4, bg = "red", justify = "right")
txtReferencje.grid(row= 0, column= 1)
 
lblFrytki = Label(f1, font=mojFont, text= "Słodycze", bd = 16, anchor = "w")
lblFrytki.grid(row= 1, column= 0)
txtFrytki = Entry(f1, font=mojFont, textvariable = Frytki, bd = 10, insertwidth=4, bg = "red", justify = "right")
txtFrytki.grid(row= 1, column= 1)
 
lblHamburger = Label(f1, font=mojFont, text= "Napoje", bd = 16, anchor = "w")
lblHamburger.grid(row= 2, column= 0)
txtHamburger = Entry(f1, font=mojFont, textvariable = Hamburger, bd = 10, insertwidth=4, bg = "red", justify = "right")
txtHamburger.grid(row= 2, column= 1)
 
lblLazania = Label(f1, font=mojFont, text= "Mrożonki", bd = 16, anchor = "w")
lblLazania.grid(row= 3, column= 0)
txtLazania = Entry(f1, font=mojFont, textvariable = Lazania, bd = 10, insertwidth=4, bg = "red", justify = "right")
txtLazania.grid(row= 3, column= 1)
 
lblPizza = Label(f1, font=mojFont, text= "Warzywa i owoce", bd = 16, anchor = "w")
lblPizza.grid(row= 4, column= 0)
txtPizza = Entry(f1, font=mojFont, textvariable = Pizza, bd = 10, insertwidth=4, bg = "red", justify = "right")
txtPizza.grid(row= 4, column= 1)
 
lblPieczonykurczak = Label(f1, font=mojFont, text= "Wyroby mięsne", bd = 16, anchor = "w")
lblPieczonykurczak.grid(row= 5, column= 0)
txtPieczonykurczak = Entry(f1, font=mojFont, textvariable = Pieczonykurczak, bd = 10, insertwidth=4, bg = "red", justify = "right")
txtPieczonykurczak.grid(row= 5, column= 1)
 
lblCola = Label(f1, font=mojFont, text= "Chemia", bd = 16, anchor = "w")
lblCola.grid(row= 6, column= 0)
txtCola = Entry(f1, font=mojFont, textvariable = Cola, bd = 10, insertwidth=4, bg = "red", justify = "right")
txtCola.grid(row= 6, column= 1)
#Restauracja 2
 
lblKoszt = Label(f1, font=mojFont, text= "Koszt jedzenia", bd = 16, anchor = "w")
lblKoszt.grid(row= 0, column= 2)
txtKoszt = Entry(f1, font=mojFont, textvariable = Koszt, bd = 10, insertwidth=4, bg = "white", justify = "right")
txtKoszt.grid(row= 0, column= 3)
 
lblSerwis_Charge = Label(f1, font=mojFont, text= "Koszt obsługi", bd = 16, anchor = "w")
lblSerwis_Charge.grid(row= 1, column= 2)
txtSerwis_Charge = Entry(f1, font=mojFont, textvariable = Serwis_Charge, bd = 10, insertwidth=4, bg = "white", justify = "right")
txtSerwis_Charge.grid(row= 1, column= 3)
 
lblPodatek = Label(f1, font=mojFont, text= "Podatek", bd = 16, anchor = "w")
lblPodatek.grid(row= 2, column= 2)
txtPodatek = Entry(f1, font=mojFont, textvariable = Podatek, bd = 10, insertwidth=4, bg = "white", justify = "right")
txtPodatek.grid(row= 2, column= 3)
 
lblSumaczesciowa = Label(f1, font=mojFont, text= "Suma częściowa", bd = 16, anchor = "w")
lblSumaczesciowa.grid(row= 3, column= 2)
txtSumaczesciowa = Entry(f1, font=mojFont, textvariable = Sumaczesciowa, bd = 10, insertwidth=4, bg = "white", justify = "right")
txtSumaczesciowa.grid(row= 3, column= 3)
 
lblKosztcalkowity = Label(f1, font=mojFont, text= "Koszt całkowity", bd = 16, anchor = "w")
lblKosztcalkowity.grid(row= 4, column= 2)
txtKosztcalkowity = Entry(f1, font=mojFont, textvariable = Kosztcalkowity, bd = 10, insertwidth=4, bg = "white", justify = "right")
txtKosztcalkowity.grid(row= 4, column= 3)
#Przyciski
btnTotal = Button(f1, padx = 16, pady = 8, bd = 16, fg = "black",font=mojFont, width = 10, text = "Całość", bg = "red", command = Ref).grid(row = 7, column = 1)
btnReset = Button(f1, padx = 16, pady = 8, bd = 16, fg = "black",font=mojFont, width = 10, text = "Reset", bg = "red", command = Reset).grid(row = 7, column = 2)
btnExit = Button(f1, padx = 16, pady = 8, bd = 16, fg = "black",font=mojFont, width = 10, text = "Wyjście", bg = "red", command = qExit).grid(row = 7, column = 3)
root.mainloop()
1

Ło chłopie...
Najpierw musisz chociaż to podzielić na funkcje, inaczej tego się nawet dobrze analizować nie da.

Ale polecam ci lekturę co do tego jak zacząć:
https://python-textbok.readthedocs.io/en/1.0/Introduction_to_GUI_Programming.html

Poza tym, polecam używać znaczników tego forum aby kod był z wcięciami oraz miał kolorowaną składnie:

```python

Na końcu kodu dajesz tylko trzy razy ten znak przed python.
Stopniowo po powyższym możemy popracować nad kodem i doprowadzić go do stanu który potrzebujesz, ale najpierw musisz kod przerobić do formy która nam pozwoli go przeanalizować :).
Przy okazji polecam ci także zapoznać się z ustawieniami domyślnymi jak je zmieniać, aby nie trzeba było za każdym razem go powtarzać:
https://stackoverflow.com/questions/15462647/modify-the-default-font-in-python-tkinter#15463496
Resztę także będzie się dało wygooglować :).

0

Nie wiem na czym dokładnie ma polegać i jak wyglądać to podzielenie tego wszystkiego, co tutaj stosować ?.Może jeszcze jakieś podpowiedzi ? :D Nie da się na tym co już mamy nic a nic pracować ?

0

Czy można dodać jakiś wyjątek i żeby był on wyświetlany w jakimś polu np. dzielenie przez 0 (Error) ?

Można to zrobić np tak:

from tkinter import messagebox

try:
  z = a/b
except ZeroDivisionError:
  messagebox.showerror('Error', 'Pamiętaj cholero, nie dziel przez zero!')

Poczytaj sobie o tym np tu https://pythonspot.com/tk-message-box/

1

Dobra, uporządkujemy trochę ten kod, ten fragment:

btn7 = Button(f2, padx = 16, pady = 16, bd = 8, fg = "black", font = mojFont, text = "7", bg = "red", command = lambda: btnClick(7)).grid (row= 2, column = 0)
btn8 = Button(f2, padx = 16, pady = 16, bd = 8, fg = "black", font = mojFont, text = "8", bg = "red", command = lambda: btnClick(8)).grid (row= 2, column = 1)
btn9 = Button(f2, padx = 16, pady = 16, bd = 8, fg = "black", font = mojFont, text = "9", bg = "red", command = lambda: btnClick(9)).grid (row= 2, column = 2)
Addition = Button(f2, padx = 16, pady = 16, bd = 8, fg = "black", font = mojFont, text = "+", bg = "red", command = lambda: btnClick("+")).grid (row= 2, column = 3)
btn4 = Button(f2, padx = 16, pady = 16, bd = 8, fg = "black", font = mojFont, text = "4", bg = "red", command = lambda: btnClick(4)).grid (row= 3, column = 0)
btn5 = Button(f2, padx = 16, pady = 16, bd = 8, fg = "black", font = mojFont, text = "5", bg = "red", command = lambda: btnClick(5)).grid (row= 3, column = 1)
btn6 = Button(f2, padx = 16, pady = 16, bd = 8, fg = "black", font = mojFont, text = "6", bg = "red", command = lambda: btnClick(6)).grid (row= 3, column = 2)
Subtraction = Button(f2, padx = 16, pady = 16, bd = 8, fg = "black", font = mojFont, text = "-", bg = "red", command = lambda: btnClick("-")).grid (row= 3, column = 3)
btn1 = Button(f2, padx = 16, pady = 16, bd = 8, fg = "black", font = mojFont, text = "1", bg = "red", command = lambda: btnClick(1)).grid (row= 4, column = 0)
btn2 = Button(f2, padx = 16, pady = 16, bd = 8, fg = "black", font = mojFont, text = "2", bg = "red", command = lambda: btnClick(2)).grid (row= 4, column = 1)
btn3 = Button(f2, padx = 16, pady = 16, bd = 8, fg = "black", font = mojFont, text = "3", bg = "red", command = lambda: btnClick(3)).grid (row= 4, column = 2)
Multiply = Button(f2, padx = 16, pady = 16, bd = 8, fg = "black", font = mojFont, text = "*", bg = "red", command = lambda: btnClick("*")).grid (row= 4, column = 3)
btn0 = Button(f2, padx = 16, pady = 16, bd = 8, fg = "black", font = mojFont, text = "0", bg = "red", command = lambda: btnClick(0)).grid (row= 5, column = 0)
btnClear = Button(f2, padx = 16, pady = 16, bd = 8, fg = "black", font = mojFont, text = "C", bg = "red", command = btnClearDisplay).grid (row= 5, column = 1)
btnEquals = Button(f2, padx = 16, pady = 16, bd = 8, fg = "black", font = mojFont, text = "=", bg = "red", command = btnEqualsInput).grid (row= 5, column = 2)
Division = Button(f2, padx = 16, pady = 16, bd = 8, fg = "black", font = mojFont, text = "/", bg = "red", command = lambda: btnClick("/")).grid (row= 5, column = 3)

def btnClick(numbers): 
    global operator
    operator = operator + str(numbers)
    text_Input.set(operator)

def btnClearDisplay():
    global operator
    operator = ""
    text_Input.set("")
def btnEqualsInput():
    global operator
    sumup = str(eval(operator))
    text_Input.set(sumup)
    operator = ""

Zastąp tym:

configure_grid_f2(f2, "Button") #Przy f1 i f2 zapewne ci się przyda (f1, "Button", "Label") 
calculator_map = "789+456-123*0C=/"
calculator_holder = {}
for enum, char in enumerate(calculator_map, 0):
    calculator_holder[char] = Button(f2, font = mojFont, text = char, command = lambda arg=char: btnClick(arg))
    calculator_holder[char].grid(row=enum//4+2, column = enum%4)

def btnClick(char):
    global operator
    if char == "=":
        sumup = str(eval(operator))
        text_Input.set(sumup)
        operator = ""
    elif char == "C":
        operator = ""
        text_Input.set("")
    else:
        operator = operator + char
        text_Input.set(operator)

def configure_grid_f2(master, *objects):  #Przy f1 i f2 zapewne ci się przyda (f1, "Button", "Label") 
    for item in objects:
        master.option_add("*"+item+".padx", 16)
        master.option_add("*"+item+".pady", 16)
        master.option_add("*"+item+".bd", 8)
        master.option_add("*"+item+".fg", "black")
        master.option_add("*"+item+".bg", "red")
        #padx = 16, pady = 16, bd = 8, fg = "black", text = "7", bg = "red"

Spróbuj z tymi instrukcjami trochę uporządkować kod, wykorzystując kontenery wg jakichś kryteriów kategorii zamiast setek nazw zmiennych :).
Jeśli uda ci się to zastosować do reszty kodu, wtedy przerobienie tego na klasę będzie już błahe :d.

Wydaje mi się że to już wygląda ładniej z poziomu kodu :)
Ah, no i oczywiście gdy chcesz się dostać do konkretnego buttona, wywołujesz go z containera w taki sposób:

twoja_zmienna["Twoja nazwa"] (...)
(...) i działasz jak na normalnym buttonie.

@Edit: Zapomniałem jeszcze do konfiguracji dorzucić fonta by nie był napisany przy każdym buttonie. Ale myślę że z tym sobie już poradzisz :).

0

O super ,dzięki już biorę się do roboty :D

0

Trochę lepiej :D Tylko nie wiem jak skrócić Restauracje i Restauracje 2 do podobnej postaci jak kalkulator.. :/

from tkinter import*
import random
import time
import tkinter as tk
from tkinter import font as tkfont
from tkinter import messagebox

root = Tk()
root.geometry("1366x768+0+0")
root.title("System zarządzania sklepem")
text_Input = StringVar()
operator = ""
mojFont = tkfont.Font(family='arial', size=16, weight='bold')
root.option_add ("* Font", mojFont)

 
Tops = Frame (root, width = 1366,height = 50, bg= "red", relief=SUNKEN)
Tops.pack(side=TOP)
 
f1 = Frame (root, width = 800,height = 700, relief=SUNKEN)
f1.pack(side=LEFT)
 
f2 = Frame (root, width = 300,height = 700, relief=SUNKEN)
f2.pack(side=RIGHT)
#Czas
localtime = time.asctime(time.localtime(time.time()))
#Informacje
lblInfo = Label(Tops, font = ("Helvetica", 50, "bold"), text = "System zarządzania sklepem", fg = "Steel Blue", bd = 0, anchor = "w")
lblInfo.grid(row = 0, column = 0)
 
lblInfo = Label(Tops, font = mojFont,text = localtime, fg = "Steel Blue", bd = 0, anchor = "w")
lblInfo.grid(row = 1, column = 0)
#Kalkulator

        
def configure_grid_f2(master, *objects):  #Przy f1 i f2 zapewne ci się przyda (f1, "Button", "Label") 
    for item in objects:
        master.option_add("*"+item+".padx", 16)
        master.option_add("*"+item+".pady", 16)
        master.option_add("*"+item+".bd", 8)
        master.option_add("*"+item+".fg", "black")
        master.option_add("*"+item+".bg", "red")
        master.option_add("*"+item+".font", mojFont)
def configure_grid_f1(master, *objects):
    for item in objects:
        master.option_add("*"+item+".bd",10)
        master.option_add("*"+item+".bg","red")
        master.option_add("*"+item+".insertwidth",4)
        master.option_add("*"+item+".justify","right")
        master.option_add("*"+item+".font",mojFont)
        master.option_add("*"+item+".padx", 16)
        master.option_add("*"+item+".pady", 16)
        master.option_add("*"+item+".fg", "black")
configure_grid_f1(f1, "Entry", "Label", "Button")
        #padx = 16, pady = 16, bd = 8, fg = "black", text = "7", bg = "red"  
configure_grid_f2(f2, "Button") #Przy f1 i f2 zapewne ci się przyda (f1, "Button", "Label") 
calculator_map = "789+456-123*0C=/"
calculator_holder = {}

for enum, char in enumerate(calculator_map, 0):
    calculator_holder[char] = Button(f2, bg = "red",bd = 16, font = mojFont, text = char, command = lambda arg=char: btnClick(arg))
    calculator_holder[char].grid(row=enum//4+2, column = enum%4)
 
def btnClick(char):
    global operator
    if char == "=":
        sumup = str(eval(operator))
        text_Input.set(sumup)
        operator = ""
    elif char == "C":
        operator = ""
        text_Input.set("")
    else:
        operator = operator + char
        text_Input.set(operator)
 
def Ref():
    x = random.randint(1, 500876)
    randomRef = str(x)
    rand.set(randomRef)
    CoF = float(Frytki.get())
    CoC = float(Cola.get())
    CoL = float(Lazania.get())
    CoH = float(Hamburger.get())
    CoP = float(Pieczonykurczak.get())
    CoPizza = float(Pizza.get())
 
    CostofFrytki = CoF * 50.00
    CostofCola = CoC * 15.00
    CostofLazania = CoL * 38.87
    CostofHamburger = CoH * 25.00
    CostofPieczonykurczak = CoP * 88.69
    CostofPizza = CoPizza * 63.99
 
    CostofPosilek = "zł", str('%.2f' % (CostofFrytki + CostofCola + CostofLazania + CostofHamburger+ CostofPieczonykurczak + CostofPizza))
 
    PayTax = ((CostofFrytki + CostofCola + CostofLazania + CostofHamburger+ CostofPieczonykurczak + CostofPizza) * 0.23)
 
    TotalCost = (CostofFrytki + CostofCola + CostofLazania + CostofHamburger+ CostofPieczonykurczak + CostofPizza)
 
    Ser_wis = ((CostofFrytki + CostofCola + CostofLazania + CostofHamburger+ CostofPieczonykurczak + CostofPizza)/99)
 
    Serwis = "zł", str('%.2f' % Ser_wis)
 
    OverallCost = "zł", str('%.2f' % (PayTax + TotalCost + Ser_wis))
    PaidTax = "zł", str('%.2f' % PayTax)
    Koszt.set(CostofPosilek)
    Podatek.set(PaidTax)
    Sumaczesciowa.set(CostofPosilek)
    Kosztcalkowity.set(OverallCost)
    Serwis_Charge.set(Serwis)
 
def qExit():
    root.destroy()
 
def Reset():
    rand.set("")
    Frytki.set("")
    Hamburger.set("")
    Lazania.set("")
    Pizza.set("")
    Pieczonykurczak.set("")
    Cola.set("")
    Kosztcalkowity.set("")
    Koszt.set("")
    Podatek.set("")
    Sumaczesciowa.set("")
    Serwis_Charge.set("")    
 
txtDisplay = Entry(f2,textvariable=text_Input, bd = 15, bg = "red")
txtDisplay.grid(columnspan=4)
 

# Restauracja

rand = StringVar()
Frytki = StringVar()
Hamburger = StringVar()
Lazania = StringVar()
Pizza = StringVar()
Pieczonykurczak = StringVar()
Cola = StringVar()
Serwis_Charge = StringVar()
Kosztcalkowity = StringVar()
Koszt = StringVar()
Podatek = StringVar()
Sumaczesciowa = StringVar()
 
lblReferencje = Label(f1,text= "Numer zamówienia")
lblReferencje.grid(row= 0, column= 0)
txtReferencje = Entry(f1,textvariable = rand,bg = "red")
txtReferencje.grid(row= 0, column= 1)
 
lblFrytki = Label(f1, text= "Słodycze")
lblFrytki.grid(row= 1, column= 0)
txtFrytki = Entry(f1, textvariable = Frytki,bg = "red")
txtFrytki.grid(row= 1, column= 1)
 
lblHamburger = Label(f1, text= "Napoje")
lblHamburger.grid(row= 2, column= 0)
txtHamburger = Entry(f1,textvariable = Hamburger,bg = "red")
txtHamburger.grid(row= 2, column= 1)
 
lblLazania = Label(f1, text= "Mrożonki")
lblLazania.grid(row= 3, column= 0)
txtLazania = Entry(f1,textvariable = Lazania,bg = "red")
txtLazania.grid(row= 3, column= 1)
 
lblPizza = Label(f1, text= "Warzywa i owoce")
lblPizza.grid(row= 4, column= 0)
txtPizza = Entry(f1,textvariable = Pizza,bg = "red")
txtPizza.grid(row= 4, column= 1)
 
lblPieczonykurczak = Label(f1, text= "Wyroby mięsne")
lblPieczonykurczak.grid(row= 5, column= 0)
txtPieczonykurczak = Entry(f1,textvariable = Pieczonykurczak,bg = "red")
txtPieczonykurczak.grid(row= 5, column= 1)
 
lblCola = Label(f1, text= "Chemia")
lblCola.grid(row= 6, column= 0)
txtCola = Entry(f1, textvariable = Cola,bg = "red")
txtCola.grid(row= 6, column= 1)
#Restauracja 2
 
lblKoszt = Label(f1, text= "Koszt jedzenia")
lblKoszt.grid(row= 0, column= 2)
txtKoszt = Entry(f1,textvariable = Koszt, bg = "white")
txtKoszt.grid(row= 0, column= 3)
 
lblSerwis_Charge = Label(f1, text= "Koszt obsługi")
lblSerwis_Charge.grid(row= 1, column= 2)
txtSerwis_Charge = Entry(f1,textvariable = Serwis_Charge, bg = "white")
txtSerwis_Charge.grid(row= 1, column= 3)
 
lblPodatek = Label(f1, text= "Podatek")
lblPodatek.grid(row= 2, column= 2)
txtPodatek = Entry(f1,textvariable = Podatek)
txtPodatek.grid(row= 2, column= 3)
 
lblSumaczesciowa = Label(f1, text= "Suma częściowa")
lblSumaczesciowa.grid(row= 3, column= 2)
txtSumaczesciowa = Entry(f1,textvariable = Sumaczesciowa, bg = "white")
txtSumaczesciowa.grid(row= 3, column= 3)
 
lblKosztcalkowity = Label(f1, text= "Koszt całkowity")
lblKosztcalkowity.grid(row= 4, column= 2)
txtKosztcalkowity = Entry(f1,textvariable = Kosztcalkowity, bg = "white")
txtKosztcalkowity.grid(row= 4, column= 3)
#Przyciski
btnTotal = Button(f1,bd = 10, width = 5, text = "Całość", bg = "red", command = Ref).grid(row = 7, column = 1)
btnReset = Button(f1,bd = 10, width = 5, text = "Reset", bg = "red", command = Reset).grid(row = 7, column = 2)
btnExit = Button(f1,bd = 10, width = 5, text = "Wyjście", bg = "red", command = qExit).grid(row = 7, column = 3)
root.mainloop()
0

No to teraz najtrudniejsza część:
Spróbuj wszystko co nie jest przypisane do funkcji, wciągnąć w funkcję która będzie się nazywać def main():

Podpowiem ci że do wielu zmiennych nie będziesz miał dostępu - będziesz musiał je przekazać jako argument funkcji (tymczasowo).
Zapisuj je sobie, później przy przerobieniu na klasę użyjesz ich jako parametr klasowy self.

Dodatkowo wszystkie elementy w f1 też możesz przerobić jak f2 w kontener:

zmienne_napisowe = {"nazwa": StringVar(), (...), "Ostatnia nazwa": StringVar()}
#I rozwiązanie jak przy f2

twoją nazwą będzie text, a StringVar użyjesz w entry.

Łatwiej ci będzie też coś takiego choćby czyścić, zamiast każdą zmienną z osobna, będziesz mógł to zrobić tak:

for key in zmienne_napisowe:
    zmienne_napisowe[key].set("")

Zwłaszcza że wszystko z f1 zapewne i tak będzie potrzebować parametru self. wtedy wystarczy ci self na containerze.

Po zastosowaniu tego już będzie prosto to zmienić na klasę :)
Spróbuj wtedy podziałać z tym tutorialem:
https://python-textbok.readthedocs.io/en/1.0/Introduction_to_GUI_Programming.html
Jak będziesz miał problemy, to pisz :)

0

Dobra ja chyba się zaciąłem cały czas błędy, nie wiem co robić dalej, proszę o pomoc... Tylko tę część udało mi sięprzypisać do funkcji main()

def main():   
    lblReferencje = Label(f1,text= "Numer zamówienia")
    lblReferencje.grid(row= 0, column= 0)
    txtReferencje = Entry(f1,textvariable = rand,bg = "red")
    txtReferencje.grid(row= 0, column= 1)
     
    lblFrytki = Label(f1, text= "Słodycze")
    lblFrytki.grid(row= 1, column= 0)
    txtFrytki = Entry(f1, textvariable = Frytki,bg = "red")
    txtFrytki.grid(row= 1, column= 1)
     
    lblHamburger = Label(f1, text= "Napoje")
    lblHamburger.grid(row= 2, column= 0)
    txtHamburger = Entry(f1,textvariable = Hamburger,bg = "red")
    txtHamburger.grid(row= 2, column= 1)
     
    lblLazania = Label(f1, text= "Mrożonki")
    lblLazania.grid(row= 3, column= 0)
    txtLazania = Entry(f1,textvariable = Lazania,bg = "red")
    txtLazania.grid(row= 3, column= 1)
     
    lblPizza = Label(f1, text= "Warzywa i owoce")
    lblPizza.grid(row= 4, column= 0)
    txtPizza = Entry(f1,textvariable = Pizza,bg = "red")
    txtPizza.grid(row= 4, column= 1)
     
    lblPieczonykurczak = Label(f1, text= "Wyroby mięsne")
    lblPieczonykurczak.grid(row= 5, column= 0)
    txtPieczonykurczak = Entry(f1,textvariable = Pieczonykurczak,bg = "red")
    txtPieczonykurczak.grid(row= 5, column= 1)
     
    lblCola = Label(f1, text= "Chemia")
    lblCola.grid(row= 6, column= 0)
    txtCola = Entry(f1, textvariable = Cola,bg = "red")
    txtCola.grid(row= 6, column= 1)
    #Restauracja 2
     
    lblKoszt = Label(f1, text= "Koszt jedzenia")
    lblKoszt.grid(row= 0, column= 2)
    txtKoszt = Entry(f1,textvariable = Koszt, bg = "white")
    txtKoszt.grid(row= 0, column= 3)
     
    lblSerwis_Charge = Label(f1, text= "Koszt obsługi")
    lblSerwis_Charge.grid(row= 1, column= 2)
    txtSerwis_Charge = Entry(f1,textvariable = Serwis_Charge, bg = "white")
    txtSerwis_Charge.grid(row= 1, column= 3)
     
    lblPodatek = Label(f1, text= "Podatek")
    lblPodatek.grid(row= 2, column= 2)
    txtPodatek = Entry(f1,textvariable = Podatek)
    txtPodatek.grid(row= 2, column= 3)
     
    lblSumaczesciowa = Label(f1, text= "Suma częściowa")
    lblSumaczesciowa.grid(row= 3, column= 2)
    txtSumaczesciowa = Entry(f1,textvariable = Sumaczesciowa, bg = "white")
    txtSumaczesciowa.grid(row= 3, column= 3)
     
    lblKosztcalkowity = Label(f1, text= "Koszt całkowity")
    lblKosztcalkowity.grid(row= 4, column= 2)
    txtKosztcalkowity = Entry(f1,textvariable = Kosztcalkowity, bg = "white")
    txtKosztcalkowity.grid(row= 4, column= 3)
    txtDisplay = Entry(f2,textvariable=text_Input, bd = 15, bg = "red")
    txtDisplay.grid(columnspan=4)
    
    #Przyciski
    btnTotal = Button(f1,bd = 10, width = 5, text = "Całość", bg = "red", command = Ref).grid(row = 7, column = 1)
    btnReset = Button(f1,bd = 10, width = 5, text = "Reset", bg = "red", command = Reset).grid(row = 7, column = 2)
    btnExit = Button(f1,bd = 10, width = 5, text = "Wyjście", bg = "red", command = qExit).grid(row = 7, column = 3)

    
    
main()
0

Cóż, jeśli to cię przerasta, może za dużą rzecz chciałeś zacząć, podejrzewam że nie wiesz w jaki sposób niektóre argumenty są przekazywane.
Może podejdźmy inną drogą, wejdź na tutorial który podesłałem odnośnie klas i tkintera, a następnie spróbuj zbudować to co tu zbudowałeś, ponownie. I przy tych problemach googluj/pisz tutaj :). To droga wielu prób i błędów, trzeba czytać errory, googlować i ewentualnie wyszukiwać sobie poradniki, w razie czego służę pomocą, bo widać że chcesz się nauczyć, ale pisząc za ciebie - zrobię to, nie pomogę niestety ;d.

0

No dobra, staram się szukać pomocy w tych problemach może jakoś dojdę do tego, ale było by miło gdybym miał gotowca :DD

0

Udało mi się wziąć pod klasę wszystko i stworzyłem funkcję main, tylko kalkulator nie działa, ale to chyba nie problem?

from tkinter import*
import random
import time
import tkinter as tk
from tkinter import font as tkfont
from tkinter import messagebox

class SystemSklep:
    def main():
        root = Tk()
        root.geometry("1366x768+0+0")
        root.title("System zarządzania sklepem")
        text_Input = StringVar()
        operator = ""
        mojFont = tkfont.Font(family='arial', size=16, weight='bold')
        root.option_add ("* Font", mojFont)
        Tops = Frame (root, width = 1366,height = 50, bg= "red", relief=SUNKEN)
        Tops.pack(side=TOP)
                 
        f1 = Frame (root, width = 800,height = 700, relief=SUNKEN)
        f1.pack(side=LEFT)
                 
        f2 = Frame (root, width = 300,height = 700, relief=SUNKEN)
        f2.pack(side=RIGHT)
        #Czas
        localtime = time.asctime(time.localtime(time.time()))
        #Informacje
        lblInfo = Label(Tops, font = ("Helvetica", 50, "bold"), text = "System zarządzania sklepem", fg = "Steel Blue", bd = 0, anchor = "w")
        lblInfo.grid(row = 0, column = 0)
                 
        lblInfo = Label(Tops, font = mojFont,text = localtime, fg = "Steel Blue", bd = 0, anchor = "w")
        lblInfo.grid(row = 1, column = 0)
        def configure_grid_f2(master, *objects):  #Przy f1 i f2 zapewne ci się przyda (f1, "Button", "Label") 
            for item in objects:
                master.option_add("*"+item+".padx", 16)
                master.option_add("*"+item+".pady", 16)
                master.option_add("*"+item+".bd", 8)
                master.option_add("*"+item+".fg", "black")
                master.option_add("*"+item+".bg", "red")
                master.option_add("*"+item+".font", mojFont)

        def configure_grid_f1(master, *objects):
            for item in objects:
                master.option_add("*"+item+".bd",10)
                master.option_add("*"+item+".bg","red")
                master.option_add("*"+item+".insertwidth",4)
                master.option_add("*"+item+".justify","right")
                master.option_add("*"+item+".font",mojFont)
                master.option_add("*"+item+".padx", 16)
                master.option_add("*"+item+".pady", 16)
                master.option_add("*"+item+".fg", "black")
        configure_grid_f1(f1, "Entry", "Label", "Button")
        #padx = 16, pady = 16, bd = 8, fg = "black", text = "7", bg = "red"  
        configure_grid_f2(f2, "Button") #Przy f1 i f2 zapewne ci się przyda (f1, "Button", "Label") 
        calculator_map = "789+456-123*0C=/"
        calculator_holder = {}

        for enum, char in enumerate(calculator_map, 0):
            calculator_holder[char] = Button(f2, bg = "red",bd = 16, font = mojFont, text = char, command = lambda arg=char: btnClick(arg))
            calculator_holder[char].grid(row=enum//4+2, column = enum%4)
 
        def btnClick(char):
            global operator
            if char == "=":
                sumup = str(eval(operator))
                text_Input.set(sumup)
                operator = ""
            elif char == "C":
                operator = ""
                text_Input.set("")
            else:
                operator = operator + char
                text_Input.set(operator)
        def Ref():
            x = random.randint(1, 500876)
            randomRef = str(x)
            rand.set(randomRef)
            CoF = float(Frytki.get())
            CoC = float(Cola.get())
            CoL = float(Lazania.get())
            CoH = float(Hamburger.get())
            CoP = float(Pieczonykurczak.get())
            CoPizza = float(Pizza.get())
         
            CostofFrytki = CoF * 50.00
            CostofCola = CoC * 15.00
            CostofLazania = CoL * 38.87
            CostofHamburger = CoH * 25.00
            CostofPieczonykurczak = CoP * 88.69
            CostofPizza = CoPizza * 63.99
         
            CostofPosilek = "zł", str('%.2f' % (CostofFrytki + CostofCola + CostofLazania + CostofHamburger+ CostofPieczonykurczak + CostofPizza))
         
            PayTax = ((CostofFrytki + CostofCola + CostofLazania + CostofHamburger+ CostofPieczonykurczak + CostofPizza) * 0.23)
         
            TotalCost = (CostofFrytki + CostofCola + CostofLazania + CostofHamburger+ CostofPieczonykurczak + CostofPizza)
         
            Ser_wis = ((CostofFrytki + CostofCola + CostofLazania + CostofHamburger+ CostofPieczonykurczak + CostofPizza)/99)
         
            Serwis = "zł", str('%.2f' % Ser_wis)
         
            OverallCost = "zł", str('%.2f' % (PayTax + TotalCost + Ser_wis))
            PaidTax = "zł", str('%.2f' % PayTax)
            Koszt.set(CostofPosilek)
            Podatek.set(PaidTax)
            Sumaczesciowa.set(CostofPosilek)
            Kosztcalkowity.set(OverallCost)
            Serwis_Charge.set(Serwis)
 
        def qExit():
            root.destroy()
 
        def Reset():
            rand.set("")
            Frytki.set("")
            Hamburger.set("")
            Lazania.set("")
            Pizza.set("")
            Pieczonykurczak.set("")
            Cola.set("")
            Kosztcalkowity.set("")
            Koszt.set("")
            Podatek.set("")
            Sumaczesciowa.set("")
            Serwis_Charge.set("")    
         
        txtDisplay = Entry(f2,textvariable=text_Input, bd = 15, bg = "red")
        txtDisplay.grid(columnspan=4)
 
            # Restauracja
             
        rand = StringVar()
        Frytki = StringVar()
        Hamburger = StringVar()
        Lazania = StringVar()
        Pizza = StringVar()
        Pieczonykurczak = StringVar()
        Cola = StringVar()
        Serwis_Charge = StringVar()
        Kosztcalkowity = StringVar()
        Koszt = StringVar()
        Podatek = StringVar()
        Sumaczesciowa = StringVar()
             
        lblReferencje = Label(f1,text= "Numer zamówienia")
        lblReferencje.grid(row= 0, column= 0)
        txtReferencje = Entry(f1,textvariable = rand,bg = "red")
        txtReferencje.grid(row= 0, column= 1)
             
        lblFrytki = Label(f1, text= "Słodycze")
        lblFrytki.grid(row= 1, column= 0)
        txtFrytki = Entry(f1, textvariable = Frytki,bg = "red")
        txtFrytki.grid(row= 1, column= 1)
             
        lblHamburger = Label(f1, text= "Napoje")
        lblHamburger.grid(row= 2, column= 0)
        txtHamburger = Entry(f1,textvariable = Hamburger,bg = "red")
        txtHamburger.grid(row= 2, column= 1)
             
        lblLazania = Label(f1, text= "Mrożonki")
        lblLazania.grid(row= 3, column= 0)
        txtLazania = Entry(f1,textvariable = Lazania,bg = "red")
        txtLazania.grid(row= 3, column= 1)
             
        lblPizza = Label(f1, text= "Warzywa i owoce")
        lblPizza.grid(row= 4, column= 0)
        txtPizza = Entry(f1,textvariable = Pizza,bg = "red")
        txtPizza.grid(row= 4, column= 1)
             
        lblPieczonykurczak = Label(f1, text= "Wyroby mięsne")
        lblPieczonykurczak.grid(row= 5, column= 0)
        txtPieczonykurczak = Entry(f1,textvariable = Pieczonykurczak,bg = "red")
        txtPieczonykurczak.grid(row= 5, column= 1)
             
        lblCola = Label(f1, text= "Chemia")
        lblCola.grid(row= 6, column= 0)
        txtCola = Entry(f1, textvariable = Cola,bg = "red")
        txtCola.grid(row= 6, column= 1)
            #Restauracja 2
             
        lblKoszt = Label(f1, text= "Koszt jedzenia")
        lblKoszt.grid(row= 0, column= 2)
        txtKoszt = Entry(f1,textvariable = Koszt, bg = "white")
        txtKoszt.grid(row= 0, column= 3)
             
        lblSerwis_Charge = Label(f1, text= "Koszt obsługi")
        lblSerwis_Charge.grid(row= 1, column= 2)
        txtSerwis_Charge = Entry(f1,textvariable = Serwis_Charge, bg = "white")
        txtSerwis_Charge.grid(row= 1, column= 3)
             
        lblPodatek = Label(f1, text= "Podatek")
        lblPodatek.grid(row= 2, column= 2)
        txtPodatek = Entry(f1,textvariable = Podatek)
        txtPodatek.grid(row= 2, column= 3)
             
        lblSumaczesciowa = Label(f1, text= "Suma częściowa")
        lblSumaczesciowa.grid(row= 3, column= 2)
        txtSumaczesciowa = Entry(f1,textvariable = Sumaczesciowa, bg = "white")
        txtSumaczesciowa.grid(row= 3, column= 3)
             
        lblKosztcalkowity = Label(f1, text= "Koszt całkowity")
        lblKosztcalkowity.grid(row= 4, column= 2)
        txtKosztcalkowity = Entry(f1,textvariable = Kosztcalkowity, bg = "white")
        txtKosztcalkowity.grid(row= 4, column= 3)
            #Przyciski
        btnTotal = Button(f1,bd = 10, width = 5, text = "Całość", bg = "red", command = Ref).grid(row = 7, column = 1)
        btnReset = Button(f1,bd = 10, width = 5, text = "Reset", bg = "red", command = Reset).grid(row = 7, column = 2)
        btnExit = Button(f1,bd = 10, width = 5, text = "Wyjście", bg = "red", command = qExit).grid(row = 7, column = 3)
    main()

1 użytkowników online, w tym zalogowanych: 0, gości: 1