Restoran Yönetim sistemi tkinter ile yaptım sorularım var?

from tkinter import *
import tkinter as tk
import datetime
import time
import locale
locale.setlocale(locale.LC_ALL,"")




pencere = Tk()
pencere.geometry("1400x900")
pencere.title("Restaurant Management Systems")
geçiciTarih="01.01.2020  SAAT 00:00:00"



def seç(x):
    harcamaListesi.insert(END, ürünler[x])

def hesabaEkle():
    pass

def tutar():

    print(harcamaListesi.get(first=0, last=END))
    tutar = 0
    for x in harcamaListesi.get(first=0, last=END):
        x = x.rstrip("₺")
        tutar += int(x[len(x) - 3:len(x)])

    tutarPenceresi = Tk()
    tutarPenceresi.geometry("600x500")
    etiket = Label(tutarPenceresi, text="ÖDENECEK TUTAR", font="Helvetica 38 bold", fg="black")
    etiket.place(x=50, y=50)
    fatura = Label(tutarPenceresi, text=str(tutar) + "₺", font="Helvetica 38 bold", fg="blue")
    fatura.place(x=150, y=110)

    alındıButonu = Button(tutarPenceresi, text = "ALINDI", bg = "green", font = "Verdana 18 bold", width = 7, command = hesabaEkle)
    alındıButonu.place(x=100,y=200)
    tutarPenceresi.mainloop()
    return tutar


def kasa():
    kasatoplam = 0
    kasatoplam = str(kasatoplam) + "₺"
    kasaEkranı = Tk()
    kasaEkranı.geometry("500x500+500+200")
    kasaEkranı.title("KASA")

    hesap = Frame(kasaEkranı, width=300, height=200, relief="groove")
    hesap.place(x=50,y=50)

    etiket1 = Label(hesap, text="KASA", font="Helvetica 15 bold", relief="sunken")
    etiket1.place(x=5, y=50)

    kasatoplamLabel = Label(hesap, text=str(kasatoplam), bg="green", relief="groove",  font="Verdana 14 bold")
    kasatoplamLabel.place(x=70,y=50)


    kasaEkranı.mainloop()
    return kasatoplam
def ürünSil():
    harcamaListesi.delete(ACTIVE)




lb1 = Label(text="Restaurant Management Systems", font=("Helvetica 30 bold"))
lb1.place(x=400, y=10)

canvas1 = Canvas(bg="steel blue", width=400, height=40)
canvas1.place(x=50, y=90)


zamanLabel = Label(text=geçiciTarih, font="Verdana 19 bold")
zamanLabel.place(x=470, y=90)

canvas2 = Canvas(bg="steel blue", width=400, height=40)
canvas2.place(x=900, y=90)

butonlar = []
ürünler = ["A  12₺","B  23₺","C  45₺","D  42₺","E  25₺","F  60₺","G  12₺","H  90₺","I  50₺","İ  42₺"]


for i in range(0,10):
    butonlar.append(Button(text=ürünler[i], font="Helvetica 8 bold", fg="blue",height=5, width=10, command= lambda x=i:seç(x)))

sayaç = 0
for i in range(0,3):
    for j in range(0,3):
        butonlar[sayaç].place(x=20+i*100,y=190+j*70)
        sayaç +=1


harcamaListesi = Listbox(selectmode=MULTIPLE, width=20, height=10, relief="sunken", bg="white",fg="black", font="Helvetica 18 bold")
harcamaListesi.place(x=550,y=200)


harcamaTutar = Button(text="Hesapla", font="Helvetica 12 bold", width=6, command=tutar)
harcamaTutar.place(x=740, y=510)

sil = Button(text="SİL", font="Helvetica 12 bold",width=6, command=ürünSil)
sil.place(x=650, y=510)

kasaAçButonu = Button(text="KASA", bg="green", font="Verdana 14 bold", width=5, command=kasa)
kasaAçButonu.place(x=1260, y=300)


#Hesap makinasının kodları burdan başlıyor!
def yaz(x):
    giriş.insert(END, str(x))

hesap = 5
s1 = 0

def işlemler(x):
    global hesap
    hesap = x
    global s1
    s1 = float(giriş.get())
    print(hesap)
    print(s1)
    giriş.delete(0,END)

s2 = 0
def hesapla():
    global s2
    s2 = float(giriş.get())
    print(s2)
    global hesap
    sonuç = 0
    if (hesap == 0):
        sonuç= s1+s2
    elif(hesap == 1):
        sonuç= s1-s2
    elif (hesap == 2):
        sonuç = s1 * s2
    elif (hesap == 3):
        sonuç = s1 / s2
    giriş.delete(0,END)
    giriş.insert(0,str(sonuç))


def delete():
    giriş.delete(0,END)




giriş = Entry(font=("Verdana 14 bold"), width=15, justify=RIGHT)
giriş.place(x=900, y=200)

b = []

for i in range(1,10):
    b.append(Button(text=str(i), font="Verdana 14 bold", command=lambda x = i:yaz(x)))

sayaç = 0
for i in range(0,3):
    for j in range(0,3):
        b[sayaç].place(x=900+j*50,y=250+i*50)
        sayaç += 1


işlem = []

for i in range(0,4):
    işlem.append(Button(font="Verdana 14 bold", width=2, command=lambda x=i:işlemler(x)))

işlem[0]["text"] = "+"
işlem[1]["text"] = "-"
işlem[2]["text"] = "x"
işlem[3]["text"] = "/"

for i in range(0,4):
    işlem[i].place(x=1050, y=250+50*i)

sb = Button(text=0, font="Verdana 14 bold", command= lambda x=0:yaz(x))
sb.place(x=900, y=400)

nb = Button(text=".", font="Verdana 14 bold",width=2, command=lambda x=".":yaz(x))
nb.place(x=950, y=400)

eb = Button(text="=",fg="red", font="Verdana 14 bold", command=hesapla)
eb.place(x=1000, y=400)

cb = Button(text="C",fg="red", font="Verdana 14 bold", command=delete)
cb.place(x=1050, y=450)

pencere.mainloop()

1.Sorum: Ana penceredeki saat ve tarih kısmının ekranda sürekli kendini yenilemesini istiyorum. After() ile yapmaya çalıştım fakat beceremedim.

2.Sorum: Ürünlerin tutarını hesapladıktan sonra açılan ekranın bir süre sonra kapanmasını istiyorum.

3.Sorum: Bu programı daha nasıl geliştirebilirim?
Şimdiden teşekkürler…

4.Sorum ise şu: Hesapla butonuna bastıktan yapılması gereken ödemeyi gösteren pencere açılıyor.
müşteri ödeme yaptıktan sonra o tutarın kasadaki parayla toplanmasını istiyorum.Tabi Kasa ise ana ekrandaki KASA butonuna bastıktan sonra açılan pencerede total parayı görmek istiyorum.

Kodunuzun sonunu bu hale getirin:

### Eklenenler

def tamamla(string):
    string = str(string)
    return "0" + string if len(string) == 1 else string

def zamanı_güncelle():
    d = datetime.datetime.now()
    zamanLabel["text"] = tamamla(d.day) + "." + tamamla(d.month) + "." + str(d.year) + "  SAAT " + tamamla(d.hour) + ":" + tamamla(d.minute) + ":" + tamamla(d.second)
    pencere.after(1000, zamanı_güncelle)

zamanı_güncelle()

###
pencere.mainloop()

pencere.destroy() kullanabilirsiniz.

1 Beğeni

Çok teşekkür ederim. Acaba diğer sorularıma da bakabildiniz mi

Kasa dediğiniz yer tam olarak neresi?

Ben kodlarıma sonradan ekleme yaptım.
Ana ekranın sağında yeşil kasa butonu var

Kodun o halini de atabilir misiniz.

en başta yazıyor sonradan düzelttim. Son hali yukarıda

from tkinter import *
import tkinter as tk
import datetime
import time
import locale
locale.setlocale(locale.LC_ALL,"")




pencere = Tk()
pencere.geometry("1400x900")
pencere.title("Restaurant Management Systems")
geçiciTarih="01.01.2020  SAAT 00:00:00"



def seç(x):
    harcamaListesi.insert(END, ürünler[x])

def hesabaEkle(tutar):
    global kasatoplam
    kasatoplam += tutar

def tutar():

    print(harcamaListesi.get(first=0, last=END))
    tutar = 0
    for x in harcamaListesi.get(first=0, last=END):
        x = x.rstrip("₺")
        tutar += int(x[len(x) - 3:len(x)])

    tutarPenceresi = Tk()
    tutarPenceresi.geometry("600x500")
    etiket = Label(tutarPenceresi, text="ÖDENECEK TUTAR", font="Helvetica 38 bold", fg="black")
    etiket.place(x=50, y=50)
    fatura = Label(tutarPenceresi, text=str(tutar) + "₺", font="Helvetica 38 bold", fg="blue")
    fatura.place(x=150, y=110)

    alındıButonu = Button(tutarPenceresi, text = "ALINDI", bg = "green", font = "Verdana 18 bold", width = 7, command = lambda: hesabaEkle(tutar))
    alındıButonu.place(x=100,y=200)
    tutarPenceresi.mainloop()
    return tutar


kasatoplam = 0
def kasa():
    kasatoplamyazısı = str(kasatoplam) + "₺"
    kasaEkranı = Tk()
    kasaEkranı.geometry("500x500+500+200")
    kasaEkranı.title("KASA")

    hesap = Frame(kasaEkranı, width=300, height=200, relief="groove")
    hesap.place(x=50,y=50)

    etiket1 = Label(hesap, text="KASA", font="Helvetica 15 bold", relief="sunken")
    etiket1.place(x=5, y=50)

    kasatoplamLabel = Label(hesap, text=kasatoplamyazısı, bg="green", relief="groove",  font="Verdana 14 bold")
    kasatoplamLabel.place(x=70,y=50)


    kasaEkranı.mainloop()
    return kasatoplam
def ürünSil():
    harcamaListesi.delete(ACTIVE)




lb1 = Label(text="Restaurant Management Systems", font=("Helvetica 30 bold"))
lb1.place(x=400, y=10)

canvas1 = Canvas(bg="steel blue", width=400, height=40)
canvas1.place(x=50, y=90)


zamanLabel = Label(text=geçiciTarih, font="Verdana 19 bold")
zamanLabel.place(x=470, y=90)

canvas2 = Canvas(bg="steel blue", width=400, height=40)
canvas2.place(x=900, y=90)

butonlar = []
ürünler = ["A  12₺","B  23₺","C  45₺","D  42₺","E  25₺","F  60₺","G  12₺","H  90₺","I  50₺","İ  42₺"]


for i in range(0,10):
    butonlar.append(Button(text=ürünler[i], font="Helvetica 8 bold", fg="blue",height=5, width=10, command= lambda x=i:seç(x)))

sayaç = 0
for i in range(0,3):
    for j in range(0,3):
        butonlar[sayaç].place(x=20+i*100,y=190+j*70)
        sayaç +=1


harcamaListesi = Listbox(selectmode=MULTIPLE, width=20, height=10, relief="sunken", bg="white",fg="black", font="Helvetica 18 bold")
harcamaListesi.place(x=550,y=200)


harcamaTutar = Button(text="Hesapla", font="Helvetica 12 bold", width=6, command=tutar)
harcamaTutar.place(x=740, y=510)

sil = Button(text="SİL", font="Helvetica 12 bold",width=6, command=ürünSil)
sil.place(x=650, y=510)

kasaAçButonu = Button(text="KASA", bg="green", font="Verdana 14 bold", width=5, command=kasa)
kasaAçButonu.place(x=1260, y=300)


#Hesap makinasının kodları burdan başlıyor!
def yaz(x):
    giriş.insert(END, str(x))

hesap = 5
s1 = 0

def işlemler(x):
    global hesap
    hesap = x
    global s1
    s1 = float(giriş.get())
    print(hesap)
    print(s1)
    giriş.delete(0,END)

s2 = 0
def hesapla():
    global s2
    s2 = float(giriş.get())
    print(s2)
    global hesap
    sonuç = 0
    if (hesap == 0):
        sonuç= s1+s2
    elif(hesap == 1):
        sonuç= s1-s2
    elif (hesap == 2):
        sonuç = s1 * s2
    elif (hesap == 3):
        sonuç = s1 / s2
    giriş.delete(0,END)
    giriş.insert(0,str(sonuç))


def delete():
    giriş.delete(0,END)




giriş = Entry(font=("Verdana 14 bold"), width=15, justify=RIGHT)
giriş.place(x=900, y=200)

b = []

for i in range(1,10):
    b.append(Button(text=str(i), font="Verdana 14 bold", command=lambda x = i:yaz(x)))

sayaç = 0
for i in range(0,3):
    for j in range(0,3):
        b[sayaç].place(x=900+j*50,y=250+i*50)
        sayaç += 1


işlem = []

for i in range(0,4):
    işlem.append(Button(font="Verdana 14 bold", width=2, command=lambda x=i:işlemler(x)))

işlem[0]["text"] = "+"
işlem[1]["text"] = "-"
işlem[2]["text"] = "x"
işlem[3]["text"] = "/"

for i in range(0,4):
    işlem[i].place(x=1050, y=250+50*i)

sb = Button(text=0, font="Verdana 14 bold", command= lambda x=0:yaz(x))
sb.place(x=900, y=400)

nb = Button(text=".", font="Verdana 14 bold",width=2, command=lambda x=".":yaz(x))
nb.place(x=950, y=400)

eb = Button(text="=",fg="red", font="Verdana 14 bold", command=hesapla)
eb.place(x=1000, y=400)

cb = Button(text="C",fg="red", font="Verdana 14 bold", command=delete)
cb.place(x=1050, y=450)

pencere.mainloop()

çok güzel oldu elinize sağlık. Birkaç soru daha aklıma takıldı.
Biz hesabaEkle(tutar) fonksiyonu belirlerken tutar parametresini kullandığımız için tutar() fonksiyonunda return tutar yazmaya gerek yok sanırım?

Bir başka sorum ise mesela bir fonksiyon altında bir pencere açtık daha sonra ise o pencereyi başka bir fonksiyon altında kapatabilir miyiz?

harcamaTutar = Button(text="Hesapla", font="Helvetica 12 bold", width=6, command=tutar)

Return işlemi fonksiyonu çağıran koda geri dönüş yapar. tutar fonksiyonunu bir buton çağırdığı için return edilen değer ile zaten bir şey yapılmayacak. Yani gerek yok.

Pencereye iki fonksiyonun da erişimi olması lazım. Pencereyi global yapabilirsiniz. Buraya bakın:

Çok teşekkür ederim. Cevaplarınız bayağı öğretici oldu. :+1: