akbarbasya26

Tkinter APP Parkir

Oct 11th, 2020
969
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1. # Kelompok 6
  2. # Izzeldin Addarda
  3. # Akbar Basyarudin
  4. # Ridho Aditya N.
  5. # Python 3.7.x
  6. from tkinter import *
  7. from tkinter import ttk, messagebox
  8. from datetime import datetime
  9.  
  10. class Parkir():
  11.     def __init__(self):
  12.         self.root = Tk()
  13.         self.datas = []
  14.         self.root.title("Tiket Parkir by Kelompok 6")
  15.         self.root.geometry("664x400+450+250")
  16.         self.root.resizable(width=False, height=False)
  17.         self.createHome()
  18.         self.root.mainloop()
  19.  
  20.     def createHome(self):
  21.         Label(self.root, text="Aplikasi Parkir Kelompok 6", font=('Comic Sans MS', 15)).place(x = 25,y = 10)
  22.         #row 1
  23.         Label(self.root, text="Cari NoPol", font=('Comic Sans MS', 10)).place(x=17, y=60)
  24.         self.nopol = StringVar()
  25.         Entry(self.root, textvariable=self.nopol).place(x=110, y=62)
  26.         Button(self.root, text="Cari", font=('Comic Sans MS', 7), width=3, height=1, command=self.searchData).place(x=250, y=60)
  27.         #row 2
  28.         Label(self.root, text="No Plat Polisi", font=('Comic Sans MS', 10)).place(x=17, y=100)
  29.         self.noplat = StringVar()
  30.         Entry(self.root, textvariable=self.noplat).place(x=110, y=102)
  31.         #row 3
  32.         Label(self.root, text="Waktu Masuk", font=('Comic Sans MS', 10)).place(x=17, y=130)
  33.         self.masuk = StringVar()
  34.         Entry(self.root, textvariable=self.masuk).place(x=110, y=132)
  35.         self.masuk.trace("w", self.updateMasuk)
  36.         #row 4
  37.         Label(self.root, text="Waktu Keluar", font=('Comic Sans MS', 10)).place(x=17, y=160)
  38.         self.keluar = StringVar()
  39.         Entry(self.root, textvariable=self.keluar).place(x=110, y=162)
  40.         self.keluar.trace("w", self.updateKeluar)
  41.         #row 4
  42.         Label(self.root, text="Biaya", font=('Comic Sans MS', 10)).place(x=17, y=190)
  43.         self.biaya = IntVar()
  44.         Entry(self.root, textvariable=self.biaya).place(x=110, y=192)
  45.         Button(self.root, text="Button", font=('Comic Sans MS', 7), width=5, height=1, command=self.insertDataTreeview1).place(x=250, y=190)
  46.         #biaya per jam 2000
  47.         Label(self.root, text="Biaya Per Jam", font=('Comic Sans MS', 20), fg="red").place(x=350, y=68)
  48.         Label(self.root, text="Rp. 2.000", font=('Comic Sans MS', 35), fg="red").place(x=350, y=105)
  49.         #---------------- treeview section -----------------#
  50.         #label
  51.         Label(self.root, text="List Pelanggan Urut Terakhir Keluar", font=('Comic Sans MS', 10), fg="blue").place(x=17, y=240)
  52.         Label(self.root, text="List Pelanggan Banyak Bayar", font=('Comic Sans MS', 10), fg="blue").place(x=347, y=240)
  53.         self.DataTreeview1()
  54.         self.DataTreeview2()
  55.  
  56.     def DataTreeview1(self):
  57.         self.treev = ttk.Treeview(selectmode ='browse', height=3)
  58.         self.treev.place(x=19,y=270)
  59.         verscrlbar = ttk.Scrollbar(
  60.                 self.root,  
  61.                 orient ="vertical",  
  62.                 command = self.treev.yview
  63.             )
  64.         verscrlbar.place(x=312, y=287)
  65.         self.treev.configure(xscrollcommand = verscrlbar.set)
  66.         self.treev["columns"] = ("1", "2", "3", "4")
  67.         self.treev['show'] = 'headings'
  68.         self.treev.column("1", width = 80, anchor ='c')
  69.         self.treev.column("2", width = 70, anchor ='se')
  70.         self.treev.column("3", width = 70, anchor ='se')
  71.         self.treev.column("4", width = 70, anchor ='se')
  72.         self.treev.heading("1", text ="No Plat Polisi")
  73.         self.treev.heading("2", text ="Masuk")
  74.         self.treev.heading("3", text ="Keluar")
  75.         self.treev.heading("4", text ="Biaya")
  76.  
  77.     def DataTreeview2(self):
  78.         self.treev2 = ttk.Treeview(selectmode ='browse', height=3)
  79.         self.treev2.place(x=350,y=270)
  80.         verscrlbar = ttk.Scrollbar(
  81.                 self.root,  
  82.                 orient ="vertical",  
  83.                 command = self.treev2.yview
  84.             )
  85.         verscrlbar.place(x=643, y=287)
  86.         self.treev2.configure(xscrollcommand = verscrlbar.set)
  87.         self.treev2["columns"] = ("1", "2", "3", "4")
  88.         self.treev2['show'] = 'headings'
  89.         self.treev2.column("1", width = 80, anchor ='c')
  90.         self.treev2.column("2", width = 70, anchor ='se')
  91.         self.treev2.column("3", width = 70, anchor ='se')
  92.         self.treev2.column("4", width = 70, anchor ='se')
  93.         self.treev2.heading("1", text ="No Plat Polisi")
  94.         self.treev2.heading("2", text ="Masuk")
  95.         self.treev2.heading("3", text ="Keluar")
  96.         self.treev2.heading("4", text ="Biaya")
  97.  
  98.     def insertDataTreeview1(self):
  99.         self.datas.append(
  100.             {
  101.                 'noplat': str(self.noplat.get()),
  102.                 'masuk': str(self.masuk.get()),
  103.                 'keluar': str(self.keluar.get()),
  104.                 'biaya': self.biaya.get()
  105.             }
  106.         )
  107.         self.treev.insert("", 0,
  108.              values = (str(self.noplat.get()), str(self.masuk.get()), str(self.keluar.get()), self.biaya.get()))
  109.         self.clearDataTreeview2()
  110.         self.insertDataTreeview2()
  111.  
  112.     def insertDataTreeview2(self):
  113.         self.datas.sort(key=self.bSort)
  114.         for x in self.datas:
  115.             self.treev2.insert("", 0,
  116.                 values = (x['noplat'], x['masuk'], x['keluar'], x['biaya']))
  117.  
  118.     def clearDataTreeview2(self):
  119.         try:
  120.             for i in self.treev2.get_children():
  121.                 self.treev2.delete(i)
  122.         except:
  123.             print("error")
  124.    
  125.     def searchData(self):
  126.         found = 0
  127.         text = ""
  128.         for z in self.datas:
  129.             if str(z['noplat']).lower().strip() == str(self.nopol.get()).lower().strip():
  130.                 text += "No. {} | No Plat : {} | Jam Masuk : {} | Jam Keluar : {} | Biaya : Rp. {}".format(str(found + 1), str(z['noplat']), str(z['masuk']), str(z['keluar']), str(z['biaya']))+"\n"
  131.                 found += 1
  132.         if found > 0:
  133.             messagebox.showinfo("Hasil Pencarian : "+str(self.nopol.get()), message=text)
  134.         else:
  135.             messagebox.showerror("Tidak ditemukan", "Hasil pencarian : {} tidak ditemukan.".format(str(self.nopol.get())))
  136.  
  137.     def updateMasuk(self, *args):
  138.         if(len(str(self.masuk.get()))) >= 8:
  139.             if len(str(self.keluar.get())) >= 8:
  140.                 biaya = self.hitungParkir(self.masuk.get(), self.keluar.get())
  141.                 self.biaya.set(biaya)
  142.                 print(biaya)
  143.         else:
  144.             self.biaya.set("input jam masuk/keluar")
  145.  
  146.     def updateKeluar(self, *args):
  147.         if(len(str(self.keluar.get()))) >= 8:
  148.             if len(str(self.masuk.get())) >= 8:
  149.                 biaya = self.hitungParkir(self.masuk.get(), self.keluar.get())
  150.                 self.biaya.set(biaya)
  151.                 print(biaya)
  152.         else:
  153.             self.biaya.set("input jam masuk/keluar")
  154.  
  155.     def hitungParkir(self, masuk, keluar):
  156.         jam_masuk = str(masuk)
  157.         jam_keluar = str(keluar)
  158.         get_hour = (datetime.strptime(jam_keluar, "%H:%M:%S") - datetime.strptime(jam_masuk, "%H:%M:%S")).seconds
  159.         if (get_hour//3600) > 0 and (get_hour//60)%60 < 50:
  160.             return get_hour//3600 * 2000
  161.         elif ((get_hour//60)%60) > 50: # lebih dari 50 menit terhitung 60 menit
  162.             return ((get_hour//3600) + 1) * 2000
  163.         else:
  164.             return 2000
  165.  
  166.     def bSort(self, e):
  167.         return e['biaya']
  168.  
  169. Parkir()
RAW Paste Data