Assalaamu’alaikum Warahmatullaahi Wabarakaatuh
(السَّلاَمُ عَلَيْكُمْ وَرَحْمَةُ اللهِ وَبَرَكَاتُهُ)
Hai sobat blogger, di sini saya akan membagikan secercah program phyton yang cukup menarik dan atractive hehehe...Tkinter? ya benar Tkinter, Apaan itu?....,,Tkinter adalah salah satu program GUI yang dimiliki oleh phython. Program ini juga di bumbui dengan cara import data dari berkas, pencarian data, pengurutan data dsb. Program ini terdiri dari 2 file:
- koperasi.CSV
- Simpul.py
OKe langsung saja, berikut adalah ilustrasi saat program di jalankan :
>> Berikut adalah Screen shoot
dari tampilan Tkinter( Tabel Data Item Di toko Alat Tulis Kampus):
Langkah Awal
Catatan : Ini adalah tampilan awal setelah program
Simpul.py di jalankan, Pada awal mula pada tombol TAMPILKAN, CARI, serta judul
pada tabelnya tampak kurang jelas ini di maksudkan bahwa tombol – tombol ini
belum aktif dan harus melakukan import data terlebih dahulu. Klik tombol IMPORT
(lingkaran merah). untuk mengimport data csv.Setelah berhasil mengimport maka
muncullah Pemberitahuan sebagai barikut :
Klik ok saja.
Catatan : lihat tombol TAMPILKAN sudah aktif, klik
TAMPILKAN
Catatan : Muncul Pemberitahuan bahwa data berhasil di
tampilkan.klik OK saja.
Langkah Pencarian data
Catatan : Setalah proses menampilakn berhasil maka tombol CARI berubah
warna yang .mengartikan sudah dapat melakukan pencarian.klik CARI
Memasukan Spidol sebagai data
yang di cari. Kemudian klik cari maka hasilnya :
Langkah Pengurutan data
Untuk Pengurutan silakan klik tombol yang ingin di urutkan(NO, TANGGAL CEK,
NAMA BARANG, JUMLAH BARANG, HARGA BARANG, MODAL, atau SALES)
Ini adalah screen shoot mengurutkan data Modal :
Catatan : Klik tombol MODAL untuk mengurutkan data modal.maka data modal
akan urut :
>> NEXT, ini adalah kode skrip Simpul.py( menggunakan IDLE 2.7.8 atau pycham juga bisa) :
#Program by Kelompok 26,Program PEncarian Serta Pengurutan dengan Bubble Sort.
from Tkinter import Tk,Frame,Menu
from Tkinter import*
import tkMessageBox as psn
import ttk
import tkFileDialog as bk
from tkMessageBox import *
import Tkinter as tk
from winsound import *
import platform
os = platform.system()
class MouseWheel(object): # Kelas untuk mengatur scroolbar
def __init__(self, root, factor = 2):
global os
self.activeArea = None
if type(factor) == int:
self.factor = factor
else:
raise Exception("Factor must be an integer.")
if os == "Linux" :
root.bind_all('<4>', self.onMouseWheel, add='+')
root.bind_all('<5>', self.onMouseWheel, add='+')
else:
# Windows and MacOS
root.bind_all("<MouseWheel>", self.onMouseWheel, add='+')
def onMouseWheel(self,event):
if self.activeArea:
self.activeArea.onMouseWheel(event)
def mouseWheel_bind(self, widget):
self.activeArea = widget
def mouseWheel_unbind(self):
self.activeArea = None
@staticmethod
def build_function_onMouseWheel(widget, orient, factor = 1):
view_command = getattr(widget, orient+'view')
if os == 'Linux':
def onMouseWheel(event):
if event.num == 4:
view_command("scroll",(-1)*factor,"units" )
elif event.num == 5:
view_command("scroll",factor,"units" )
elif os == 'Windows':
def onMouseWheel(event):
view_command("scroll",(-1)*int((event.delta/120)*factor),"units" )
elif os == 'Darwin':
def onMouseWheel(event):
view_command("scroll",event.delta,"units" )
return onMouseWheel
def add_scrolling(self, scrollingArea, xscrollbar=None, yscrollbar=None):
scrollingArea.bind('<Enter>',lambda event: self.mouseWheel_bind(scrollingArea))
scrollingArea.bind('<Leave>', lambda event: self.mouseWheel_unbind())
if xscrollbar and not hasattr(xscrollbar, 'onMouseWheel'):
setattr(xscrollbar, 'onMouseWheel', self.build_function_onMouseWheel(scrollingArea,'x', self.factor) )
if yscrollbar and not hasattr(yscrollbar, 'onMouseWheel'):
setattr(yscrollbar, 'onMouseWheel', self.build_function_onMouseWheel(scrollingArea,'y', self.factor) )
active_scrollbar_on_mouse_wheel = yscrollbar or xscrollbar
if active_scrollbar_on_mouse_wheel:
setattr(scrollingArea, 'onMouseWheel', active_scrollbar_on_mouse_wheel.onMouseWheel)
for scrollbar in (xscrollbar, yscrollbar):
if scrollbar:
scrollbar.bind('<Enter>', lambda event, scrollbar=scrollbar: self.mouseWheel_bind(scrollbar) )
scrollbar.bind('<Leave>', lambda event: self.mouseWheel_unbind())
class simpul():
'''Membuat kelas simpul'''
def __init__(self, data=None):
self.data = data
self.link = None
class Tugas_GUI(Frame):
'''Membuat kelas GUI'''
def __init__(self,parent):
Frame.__init__(self, parent)
self.parent = parent
self.initUI()
self.list = None
# membuat canvas pada frame utama
self.canvas = Canvas(parent, background="brown")
self.frame = Frame(self.canvas, background="yellow")
# mengedit style untuk scrollbar
s = ttk.Style()
s.theme_use('classic')
s.configure("coba.Vertical.TScrollbar", foreground = 'yellow',background='teal')
# membuat scrollbar pada canvas
self.vsb = ttk.Scrollbar(parent, style="coba.Vertical.TScrollbar", orient="vertical", command=self.canvas.yview)
self.canvas.configure(yscrollcommand=self.vsb.set)
self.vsb.pack(side="right", fill="y")
self.canvas.pack(side="left", fill="both", expand=True)
self.canvas.create_window((0,0), window=self.frame, anchor="nw",
tags="self.frame")
self.frame.bind("<Configure>", self.OnFrameConfigure)
# agar scrool bar dapat di scroll
MouseWheel(root).add_scrolling(self.canvas, yscrollbar=self.vsb)
def OnFrameConfigure(self, event):
'''Reset the scroll region to encompass the inner frame'''
self.canvas.configure(scrollregion=self.canvas.bbox("all"),width=400)
def initUI(self):
self.parent.title("Tabel Data Item Di Toko Alat Tulis Kampus")
menubar = Menu(self.parent)
self.parent.config(menu = menubar, bg = 'yellow')
# Membuat dan mengatur Button dan frame
self.btnKeluar = Button(self.parent,cursor = 'pirate',text="\n\n\n\nK\n\nE\n\nL\n\nU\n\nA\n\nR\n\n\n\n",
relief=RIDGE, bd=5, bg='burlywood',
fg='red',command=self.onExit)
self.btnKeluar.pack(side=RIGHT, fill=X)
self.btnimpor = Button(self.parent,text="\n\n\n\nI\n\nM\n\nP\n\nO\n\nR\n\nT\n\n\n\n",
relief=RIDGE, bd=5, bg='burlywood',
fg='red',command=self.impor)
self.btnimpor.pack(side=LEFT, fill=X)
fr_atas = Frame(self.parent)
fr_atas.pack(fill = BOTH)
self.btnnomor = Button(fr_atas,text="NO",
bd=1, bg='brown', width=14,
fg='green',command=self.nomor)
self.btnnomor.pack(side=LEFT, fill=BOTH)
self.btnnomor.configure(state=DISABLED)
self.btntanggal = Button(fr_atas,text="TANGGAL CEK",
bd=1, bg='brown',width=14,
fg='green',command=self.nomor)
self.btntanggal.pack(side=LEFT, fill=BOTH)
self.btntanggal.configure(state=DISABLED)
self.btnnama = Button(fr_atas,text="NAMA BARANG",
bd=1, bg='brown',width=14,
fg='green',command=self.nama)
self.btnnama.pack(side=LEFT, fill=BOTH)
self.btnnama.configure(state=DISABLED)
self.btnjumlah = Button(fr_atas,text="JUMLAH BARANG",
bd=1, bg='brown',width=14,
fg='green',command=self.jumlah)
self.btnjumlah.pack(side=LEFT, fill=BOTH)
self.btnjumlah.configure(state=DISABLED)
self.btnharga = Button(fr_atas,text="HARGA BARANG",
bd=1, bg='brown',width=14,
fg='green',command=self.harga)
self.btnharga.pack(side=LEFT, fill=BOTH)
self.btnharga.configure(state=DISABLED)
self.btnmodal = Button(fr_atas,text="MODAL",
bd=1, bg='brown',width=14,
fg='green',command=self.modal)
self.btnmodal.pack(side=LEFT, fill=BOTH)
self.btnmodal.configure(state=DISABLED)
self.btnsales = Button(fr_atas,text="SALES",
bd=1, bg='brown',width=14,
fg='green',command=self.sales)
self.btnsales.pack(side=LEFT, fill=BOTH)
self.btnsales.configure(state=DISABLED)
self.btncari = Button(self.parent,cursor = 'target',text="CARI",
bd=5, bg='burlywood',
fg='red',command=self.carisemua)
self.btncari.pack(side=BOTTOM, fill=X)
self.btncari.configure(state=DISABLED)
self.lblStatus = Button(self.parent,
text='TAMPILKAN',
bd=5,fg='green',bg='brown',command=self.tampilkan)
self.lblStatus.pack(side=BOTTOM, fill=X)
self.lblStatus.configure(state=DISABLED)
def kejadian(self): # Fungsi Mengubah Button menjadi aktif
self.btncari.configure(state=NORMAL)
self.btnnomor.configure(state=NORMAL)
self.btntanggal.configure(state=NORMAL)
self.btnnama.configure(state=NORMAL)
self.btnjumlah.configure(state=NORMAL)
self.btnharga.configure(state=NORMAL)
self.btnmodal.configure(state=NORMAL)
self.btnsales.configure(state=NORMAL)
def carisemua(self): # Fungsi untuk pencarian data
## p=self.list
def show_entry_fields():
coba = []
cek = False
p=self.list
while p.link is not None:
p=p.link
if p.data.no == target.get()or \
p.data.tanggal[:2] == target.get() or p.data.tanggal[3:5] == target.get() or p.data.tanggal[6:] == target.get() or \
p.data.nama == target.get() or \
p.data.jumlah == target.get() or \
p.data.harga == target.get() or \
p.data.modal == target.get() or \
p.data.sales == target.get():
data = (p.data.no,p.data.tanggal,p.data.nama,p.data.jumlah,p.data.harga,p.data.modal,p.data.sales.rstrip('\n'))
coba.append(data)
cek=True
p=self.list
while p.link is not None:
p=p.link
if p.data.no != target.get()and \
p.data.tanggal[:2] != target.get() and p.data.tanggal[3:5] != target.get() and p.data.tanggal[6:] != target.get() and \
p.data.nama != target.get() and \
p.data.jumlah != target.get() and \
p.data.harga != target.get() and \
p.data.modal != target.get() and \
p.data.sales != target.get():
coba.append(('','','','','','',''))
if cek == False:
psn.showwarning("Peringatan !", "Data Tidak Sesuai")
data_tampil = coba
for bariske in range(len(coba)):
baris = data_tampil[bariske]
for kolomke in range(len(coba[0])):
nilai = baris[kolomke]
widget = self._widgets[bariske][kolomke]
widget.configure(text=nilai)
cari = Tk()
cari.title('PENCARIAN DATA')
cari.config(bg='green')
Label(cari, text="Masukan Data Yang Ingin Di Cari",fg='dark blue',bg='green').grid(row=0)
target = Entry(cari)
target.grid(row=0, column=1)
Button(cari, text='batal', command=cari.destroy,bg='#ff0000',fg='white').grid(row=3, column=1, sticky=W, padx=20,ipadx=30,pady=4)
Button(cari, text=' cari ', command=show_entry_fields,bg='red',fg='white').grid(ipadx=30,row=3, column=0, sticky=W, padx=15)
mainloop( )
def diam(self):
pass
def tampilsortir(self): # Fungsi untuk menampilkan hasil sortiran
data_tampil = self.data_mhs
for row in range(self.rows):
baris = data_tampil[row]
for column in range(self.columns):
nilai = baris[column]
widget = self._widgets[row][column]
widget.configure(text=nilai)
############################## pengurutan data menggunakan Bubble Sort ####################################
def bubbleSort(self,Data,indeks):
'''fungsi untuk mengurutkan data dengan Bubble Sort
input berupa list bernama Data'''
n = len(Data) # n adalah jumlah data
#mengurutkan berdasarkan atribut nomor
if indeks == 'nomor':
for k in range(1,n): # ulangi sebanyak n-1 kali
for i in range(n-1): # lakukan dari posisi paling kiri hingga ke kanan
if int(Data[i].data.no) > int(Data[i+1].data.no): # bandingkan dua data yang berdekatan
Data[i], Data[i+1] = Data[i+1], Data[i] # menukar posisi data
#mengurutkan berdasarkan atribut nama
elif indeks == 'nama':
for k in range(1,n):
for i in range(n-1):
if (Data[i].data.nama) > (Data[i+1].data.nama):
Data[i], Data[i+1] = Data[i+1], Data[i]
#mengurutkan berdasarkan atribut jumlah
elif indeks == 'jumlah':
for k in range(1,n):
for i in range(n-1):
if int(Data[i].data.jumlah) > int(Data[i+1].data.jumlah):
Data[i], Data[i+1] = Data[i+1], Data[i]
#mengurutkan berdasarkan atribut harga
elif indeks == 'harga':
for k in range(1,n):
for i in range(n-1):
if int(Data[i].data.harga) > int(Data[i+1].data.harga):
Data[i], Data[i+1] = Data[i+1], Data[i]
#mengurutkan berdasarkan atribut modal
elif indeks == 'modal':
for k in range(1,n):
for i in range(n-1):
if int(Data[i].data.modal) > int(Data[i+1].data.modal):
Data[i], Data[i+1] = Data[i+1], Data[i]
#mengurutkan berdasarkan atribut sales
elif indeks == 'sales':
for k in range(1,n):
for i in range(n-1):
if (Data[i].data.sales) > (Data[i+1].data.sales):
Data[i], Data[i+1] = Data[i+1], Data[i]
def bubble(self,LL,indeks):
'''mengurutkan linked list dengan Bubble Sort
Tricky: dengan mengkonversi linked menjadi array, bubble sort lalu
dikembalikan menjadi array'''
# konversi dari Linked List ke python list
li = []
p = LL.link
while p != None:
li.append(p)
p = p.link
# memanggil fungsi bubble sort
self.bubbleSort(li,indeks)
# konversi dari python list ke Linked List
p = LL
for simpul in li:
p.link = simpul
simpul.link = None
p = p.link
p=LL.link
self.data_mhs = []
while p is not None:
data=(p.data.no,p.data.tanggal,p.data.nama,p.data.jumlah,p.data.harga,p.data.modal,p.data.sales.rstrip('\n'))
self.data_mhs.append(data)
p=p.link
def nomor(self): # Fungsi untuk mengurutkan nomor
data = self.list_tampil
self.bubble(data,'nomor')
self.tampilsortir()
def nama(self): # Fungsi untuk mengurutkan nama barang
data=self.list_tampil
self.bubble(data,'nama')
self.tampilsortir()
def jumlah(self): # Fungsi untuk mengurutkan jumlah barang
data=self.list_tampil
self.bubble(data,'jumlah')
self.tampilsortir()
def harga(self): # Fungsi untuk mengurutkan harga barang
data=self.list_tampil
self.bubble(data,'harga')
self.tampilsortir()
def modal(self): # Fungsi untuk mengurutkan modal
data=self.list_tampil
self.bubble(data,'modal')
self.tampilsortir()
def sales(self): # Fungsi untuk mengurutkan sales
data=self.list_tampil
self.bubble(data,'sales')
self.tampilsortir()
def impor(self): # Funsi untuk mengimport file csv
try :
File = bk.askopenfilename()
x=open(File) # membuka file csv
x.readline() # membaca file csv dengan mengabaikan baris pertama
baca=x.readlines() #membaca semua data file csv dan menjadikannya sebuah list didalam variabel 'baca'
self.list = simpul() #self.list adalah kepala dari linked list yang akan dibuat ==> berisi None
p=self.list
for k in range (len(baca)): #
z=baca[k].split(';') #
L=data_transaksi(z[0],z[1],z[2],z[3],z[4],z[5],z[6]) # membuat isi linked list
p.link=simpul(L) #
p=p.link #
psn.showinfo("Pemberitahuan","import berhasil")
x.close()
self.list_tampil = self.list # membuat duplikat self.list
self.lblStatus.configure(state=NORMAL) # mengaktifkan button tampilkan
except IOError :
psn.showwarning("Pemberitahuan","Import dibatalkan")
except IndexError :
psn.showwarning("Peringatan !","file anda tidak sesuai")
def tampilkan(self): # Fungsi untuk menampilkan data
try :
p=self.list
self.data_mhs = []
while p.link is not None:
data=(p.link.data.no,p.link.data.tanggal,p.link.data.nama,p.link.data.jumlah,p.link.data.harga,p.link.data.modal,p.link.data.sales.rstrip('\n'))
self.data_mhs.append(data)
p=p.link
# bagian yang ditambahkan untuk menampilkan data
self.rows = len(self.data_mhs) # jumlah baris
self.columns = len(self.data_mhs[0]) # jumlah kolom
self._widgets = list()
for row in range(self.rows):
self.current_row = list()
for column in range(self.columns):
tampil = ''
label = Label(self.frame, text="%s" % tampil, width=14, bg = 'blueviolet',fg = 'aqua')
label.grid(row=row, column=column, sticky="nsew", padx=1, pady=1)
self.current_row.append(label)
self._widgets.append(self.current_row)
for column in range(self.columns):
self.grid_columnconfigure(column, weight=1)
self.pack(side="top", fill="x")
# akhir bagian yang ditambahkan untuk menampilkan data
data_tampil = self.data_mhs
for row in range(self.rows):
baris = data_tampil[row]
for column in range(self.columns):
nilai = baris[column]
widget = self._widgets[row][column]
widget.configure(text=nilai)
self.kejadian()
psn.showinfo("pemberitahuan","Berhasil Ditampilkan")
## self.lblStatus.configure(state=DISABLED) # ini bisa di gunakan untuk maximize dan minimize
except :
psn.showwarning("Peringatan !", "Tidak ada file yang terbaca")
def onExit(self): # Fungsi untuk keluar dari program
if askyesno('Peringatan!', 'Anda ingin keluar?'):
play1 = PlaySound('SuaraMengunciMobil.wav', SND_FILENAME)
self.parent.destroy()
else:
showinfo('Pemberitahuan', 'Keluar dibatalkan')
class data_transaksi():
'''Membuat kelas data transaksi'''
def __init__(self,no=None,tanggal=None,nama=None,jumlah=None,harga=None,modal=None,sales=None):
self.no = no
self.tanggal = tanggal
self.nama = nama
self.jumlah = jumlah
self.harga = harga
self.modal = modal
self.sales = sales
if __name__ =='__main__': # Untuk menjalankan Tkinter atau GUI
root = Tk()
root.geometry("813x294+400+400")
root.resizable(False,False)
app = Tugas_GUI(root)
root.mainloop()
from Tkinter import Tk,Frame,Menu
from Tkinter import*
import tkMessageBox as psn
import ttk
import tkFileDialog as bk
from tkMessageBox import *
import Tkinter as tk
from winsound import *
import platform
os = platform.system()
class MouseWheel(object): # Kelas untuk mengatur scroolbar
def __init__(self, root, factor = 2):
global os
self.activeArea = None
if type(factor) == int:
self.factor = factor
else:
raise Exception("Factor must be an integer.")
if os == "Linux" :
root.bind_all('<4>', self.onMouseWheel, add='+')
root.bind_all('<5>', self.onMouseWheel, add='+')
else:
# Windows and MacOS
root.bind_all("<MouseWheel>", self.onMouseWheel, add='+')
def onMouseWheel(self,event):
if self.activeArea:
self.activeArea.onMouseWheel(event)
def mouseWheel_bind(self, widget):
self.activeArea = widget
def mouseWheel_unbind(self):
self.activeArea = None
@staticmethod
def build_function_onMouseWheel(widget, orient, factor = 1):
view_command = getattr(widget, orient+'view')
if os == 'Linux':
def onMouseWheel(event):
if event.num == 4:
view_command("scroll",(-1)*factor,"units" )
elif event.num == 5:
view_command("scroll",factor,"units" )
elif os == 'Windows':
def onMouseWheel(event):
view_command("scroll",(-1)*int((event.delta/120)*factor),"units" )
elif os == 'Darwin':
def onMouseWheel(event):
view_command("scroll",event.delta,"units" )
return onMouseWheel
def add_scrolling(self, scrollingArea, xscrollbar=None, yscrollbar=None):
scrollingArea.bind('<Enter>',lambda event: self.mouseWheel_bind(scrollingArea))
scrollingArea.bind('<Leave>', lambda event: self.mouseWheel_unbind())
if xscrollbar and not hasattr(xscrollbar, 'onMouseWheel'):
setattr(xscrollbar, 'onMouseWheel', self.build_function_onMouseWheel(scrollingArea,'x', self.factor) )
if yscrollbar and not hasattr(yscrollbar, 'onMouseWheel'):
setattr(yscrollbar, 'onMouseWheel', self.build_function_onMouseWheel(scrollingArea,'y', self.factor) )
active_scrollbar_on_mouse_wheel = yscrollbar or xscrollbar
if active_scrollbar_on_mouse_wheel:
setattr(scrollingArea, 'onMouseWheel', active_scrollbar_on_mouse_wheel.onMouseWheel)
for scrollbar in (xscrollbar, yscrollbar):
if scrollbar:
scrollbar.bind('<Enter>', lambda event, scrollbar=scrollbar: self.mouseWheel_bind(scrollbar) )
scrollbar.bind('<Leave>', lambda event: self.mouseWheel_unbind())
class simpul():
'''Membuat kelas simpul'''
def __init__(self, data=None):
self.data = data
self.link = None
class Tugas_GUI(Frame):
'''Membuat kelas GUI'''
def __init__(self,parent):
Frame.__init__(self, parent)
self.parent = parent
self.initUI()
self.list = None
# membuat canvas pada frame utama
self.canvas = Canvas(parent, background="brown")
self.frame = Frame(self.canvas, background="yellow")
# mengedit style untuk scrollbar
s = ttk.Style()
s.theme_use('classic')
s.configure("coba.Vertical.TScrollbar", foreground = 'yellow',background='teal')
# membuat scrollbar pada canvas
self.vsb = ttk.Scrollbar(parent, style="coba.Vertical.TScrollbar", orient="vertical", command=self.canvas.yview)
self.canvas.configure(yscrollcommand=self.vsb.set)
self.vsb.pack(side="right", fill="y")
self.canvas.pack(side="left", fill="both", expand=True)
self.canvas.create_window((0,0), window=self.frame, anchor="nw",
tags="self.frame")
self.frame.bind("<Configure>", self.OnFrameConfigure)
# agar scrool bar dapat di scroll
MouseWheel(root).add_scrolling(self.canvas, yscrollbar=self.vsb)
def OnFrameConfigure(self, event):
'''Reset the scroll region to encompass the inner frame'''
self.canvas.configure(scrollregion=self.canvas.bbox("all"),width=400)
def initUI(self):
self.parent.title("Tabel Data Item Di Toko Alat Tulis Kampus")
menubar = Menu(self.parent)
self.parent.config(menu = menubar, bg = 'yellow')
# Membuat dan mengatur Button dan frame
self.btnKeluar = Button(self.parent,cursor = 'pirate',text="\n\n\n\nK\n\nE\n\nL\n\nU\n\nA\n\nR\n\n\n\n",
relief=RIDGE, bd=5, bg='burlywood',
fg='red',command=self.onExit)
self.btnKeluar.pack(side=RIGHT, fill=X)
self.btnimpor = Button(self.parent,text="\n\n\n\nI\n\nM\n\nP\n\nO\n\nR\n\nT\n\n\n\n",
relief=RIDGE, bd=5, bg='burlywood',
fg='red',command=self.impor)
self.btnimpor.pack(side=LEFT, fill=X)
fr_atas = Frame(self.parent)
fr_atas.pack(fill = BOTH)
self.btnnomor = Button(fr_atas,text="NO",
bd=1, bg='brown', width=14,
fg='green',command=self.nomor)
self.btnnomor.pack(side=LEFT, fill=BOTH)
self.btnnomor.configure(state=DISABLED)
self.btntanggal = Button(fr_atas,text="TANGGAL CEK",
bd=1, bg='brown',width=14,
fg='green',command=self.nomor)
self.btntanggal.pack(side=LEFT, fill=BOTH)
self.btntanggal.configure(state=DISABLED)
self.btnnama = Button(fr_atas,text="NAMA BARANG",
bd=1, bg='brown',width=14,
fg='green',command=self.nama)
self.btnnama.pack(side=LEFT, fill=BOTH)
self.btnnama.configure(state=DISABLED)
self.btnjumlah = Button(fr_atas,text="JUMLAH BARANG",
bd=1, bg='brown',width=14,
fg='green',command=self.jumlah)
self.btnjumlah.pack(side=LEFT, fill=BOTH)
self.btnjumlah.configure(state=DISABLED)
self.btnharga = Button(fr_atas,text="HARGA BARANG",
bd=1, bg='brown',width=14,
fg='green',command=self.harga)
self.btnharga.pack(side=LEFT, fill=BOTH)
self.btnharga.configure(state=DISABLED)
self.btnmodal = Button(fr_atas,text="MODAL",
bd=1, bg='brown',width=14,
fg='green',command=self.modal)
self.btnmodal.pack(side=LEFT, fill=BOTH)
self.btnmodal.configure(state=DISABLED)
self.btnsales = Button(fr_atas,text="SALES",
bd=1, bg='brown',width=14,
fg='green',command=self.sales)
self.btnsales.pack(side=LEFT, fill=BOTH)
self.btnsales.configure(state=DISABLED)
self.btncari = Button(self.parent,cursor = 'target',text="CARI",
bd=5, bg='burlywood',
fg='red',command=self.carisemua)
self.btncari.pack(side=BOTTOM, fill=X)
self.btncari.configure(state=DISABLED)
self.lblStatus = Button(self.parent,
text='TAMPILKAN',
bd=5,fg='green',bg='brown',command=self.tampilkan)
self.lblStatus.pack(side=BOTTOM, fill=X)
self.lblStatus.configure(state=DISABLED)
def kejadian(self): # Fungsi Mengubah Button menjadi aktif
self.btncari.configure(state=NORMAL)
self.btnnomor.configure(state=NORMAL)
self.btntanggal.configure(state=NORMAL)
self.btnnama.configure(state=NORMAL)
self.btnjumlah.configure(state=NORMAL)
self.btnharga.configure(state=NORMAL)
self.btnmodal.configure(state=NORMAL)
self.btnsales.configure(state=NORMAL)
def carisemua(self): # Fungsi untuk pencarian data
## p=self.list
def show_entry_fields():
coba = []
cek = False
p=self.list
while p.link is not None:
p=p.link
if p.data.no == target.get()or \
p.data.tanggal[:2] == target.get() or p.data.tanggal[3:5] == target.get() or p.data.tanggal[6:] == target.get() or \
p.data.nama == target.get() or \
p.data.jumlah == target.get() or \
p.data.harga == target.get() or \
p.data.modal == target.get() or \
p.data.sales == target.get():
data = (p.data.no,p.data.tanggal,p.data.nama,p.data.jumlah,p.data.harga,p.data.modal,p.data.sales.rstrip('\n'))
coba.append(data)
cek=True
p=self.list
while p.link is not None:
p=p.link
if p.data.no != target.get()and \
p.data.tanggal[:2] != target.get() and p.data.tanggal[3:5] != target.get() and p.data.tanggal[6:] != target.get() and \
p.data.nama != target.get() and \
p.data.jumlah != target.get() and \
p.data.harga != target.get() and \
p.data.modal != target.get() and \
p.data.sales != target.get():
coba.append(('','','','','','',''))
if cek == False:
psn.showwarning("Peringatan !", "Data Tidak Sesuai")
data_tampil = coba
for bariske in range(len(coba)):
baris = data_tampil[bariske]
for kolomke in range(len(coba[0])):
nilai = baris[kolomke]
widget = self._widgets[bariske][kolomke]
widget.configure(text=nilai)
cari = Tk()
cari.title('PENCARIAN DATA')
cari.config(bg='green')
Label(cari, text="Masukan Data Yang Ingin Di Cari",fg='dark blue',bg='green').grid(row=0)
target = Entry(cari)
target.grid(row=0, column=1)
Button(cari, text='batal', command=cari.destroy,bg='#ff0000',fg='white').grid(row=3, column=1, sticky=W, padx=20,ipadx=30,pady=4)
Button(cari, text=' cari ', command=show_entry_fields,bg='red',fg='white').grid(ipadx=30,row=3, column=0, sticky=W, padx=15)
mainloop( )
def diam(self):
pass
def tampilsortir(self): # Fungsi untuk menampilkan hasil sortiran
data_tampil = self.data_mhs
for row in range(self.rows):
baris = data_tampil[row]
for column in range(self.columns):
nilai = baris[column]
widget = self._widgets[row][column]
widget.configure(text=nilai)
############################## pengurutan data menggunakan Bubble Sort ####################################
def bubbleSort(self,Data,indeks):
'''fungsi untuk mengurutkan data dengan Bubble Sort
input berupa list bernama Data'''
n = len(Data) # n adalah jumlah data
#mengurutkan berdasarkan atribut nomor
if indeks == 'nomor':
for k in range(1,n): # ulangi sebanyak n-1 kali
for i in range(n-1): # lakukan dari posisi paling kiri hingga ke kanan
if int(Data[i].data.no) > int(Data[i+1].data.no): # bandingkan dua data yang berdekatan
Data[i], Data[i+1] = Data[i+1], Data[i] # menukar posisi data
#mengurutkan berdasarkan atribut nama
elif indeks == 'nama':
for k in range(1,n):
for i in range(n-1):
if (Data[i].data.nama) > (Data[i+1].data.nama):
Data[i], Data[i+1] = Data[i+1], Data[i]
#mengurutkan berdasarkan atribut jumlah
elif indeks == 'jumlah':
for k in range(1,n):
for i in range(n-1):
if int(Data[i].data.jumlah) > int(Data[i+1].data.jumlah):
Data[i], Data[i+1] = Data[i+1], Data[i]
#mengurutkan berdasarkan atribut harga
elif indeks == 'harga':
for k in range(1,n):
for i in range(n-1):
if int(Data[i].data.harga) > int(Data[i+1].data.harga):
Data[i], Data[i+1] = Data[i+1], Data[i]
#mengurutkan berdasarkan atribut modal
elif indeks == 'modal':
for k in range(1,n):
for i in range(n-1):
if int(Data[i].data.modal) > int(Data[i+1].data.modal):
Data[i], Data[i+1] = Data[i+1], Data[i]
#mengurutkan berdasarkan atribut sales
elif indeks == 'sales':
for k in range(1,n):
for i in range(n-1):
if (Data[i].data.sales) > (Data[i+1].data.sales):
Data[i], Data[i+1] = Data[i+1], Data[i]
def bubble(self,LL,indeks):
'''mengurutkan linked list dengan Bubble Sort
Tricky: dengan mengkonversi linked menjadi array, bubble sort lalu
dikembalikan menjadi array'''
# konversi dari Linked List ke python list
li = []
p = LL.link
while p != None:
li.append(p)
p = p.link
# memanggil fungsi bubble sort
self.bubbleSort(li,indeks)
# konversi dari python list ke Linked List
p = LL
for simpul in li:
p.link = simpul
simpul.link = None
p = p.link
p=LL.link
self.data_mhs = []
while p is not None:
data=(p.data.no,p.data.tanggal,p.data.nama,p.data.jumlah,p.data.harga,p.data.modal,p.data.sales.rstrip('\n'))
self.data_mhs.append(data)
p=p.link
def nomor(self): # Fungsi untuk mengurutkan nomor
data = self.list_tampil
self.bubble(data,'nomor')
self.tampilsortir()
def nama(self): # Fungsi untuk mengurutkan nama barang
data=self.list_tampil
self.bubble(data,'nama')
self.tampilsortir()
def jumlah(self): # Fungsi untuk mengurutkan jumlah barang
data=self.list_tampil
self.bubble(data,'jumlah')
self.tampilsortir()
def harga(self): # Fungsi untuk mengurutkan harga barang
data=self.list_tampil
self.bubble(data,'harga')
self.tampilsortir()
def modal(self): # Fungsi untuk mengurutkan modal
data=self.list_tampil
self.bubble(data,'modal')
self.tampilsortir()
def sales(self): # Fungsi untuk mengurutkan sales
data=self.list_tampil
self.bubble(data,'sales')
self.tampilsortir()
def impor(self): # Funsi untuk mengimport file csv
try :
File = bk.askopenfilename()
x=open(File) # membuka file csv
x.readline() # membaca file csv dengan mengabaikan baris pertama
baca=x.readlines() #membaca semua data file csv dan menjadikannya sebuah list didalam variabel 'baca'
self.list = simpul() #self.list adalah kepala dari linked list yang akan dibuat ==> berisi None
p=self.list
for k in range (len(baca)): #
z=baca[k].split(';') #
L=data_transaksi(z[0],z[1],z[2],z[3],z[4],z[5],z[6]) # membuat isi linked list
p.link=simpul(L) #
p=p.link #
psn.showinfo("Pemberitahuan","import berhasil")
x.close()
self.list_tampil = self.list # membuat duplikat self.list
self.lblStatus.configure(state=NORMAL) # mengaktifkan button tampilkan
except IOError :
psn.showwarning("Pemberitahuan","Import dibatalkan")
except IndexError :
psn.showwarning("Peringatan !","file anda tidak sesuai")
def tampilkan(self): # Fungsi untuk menampilkan data
try :
p=self.list
self.data_mhs = []
while p.link is not None:
data=(p.link.data.no,p.link.data.tanggal,p.link.data.nama,p.link.data.jumlah,p.link.data.harga,p.link.data.modal,p.link.data.sales.rstrip('\n'))
self.data_mhs.append(data)
p=p.link
# bagian yang ditambahkan untuk menampilkan data
self.rows = len(self.data_mhs) # jumlah baris
self.columns = len(self.data_mhs[0]) # jumlah kolom
self._widgets = list()
for row in range(self.rows):
self.current_row = list()
for column in range(self.columns):
tampil = ''
label = Label(self.frame, text="%s" % tampil, width=14, bg = 'blueviolet',fg = 'aqua')
label.grid(row=row, column=column, sticky="nsew", padx=1, pady=1)
self.current_row.append(label)
self._widgets.append(self.current_row)
for column in range(self.columns):
self.grid_columnconfigure(column, weight=1)
self.pack(side="top", fill="x")
# akhir bagian yang ditambahkan untuk menampilkan data
data_tampil = self.data_mhs
for row in range(self.rows):
baris = data_tampil[row]
for column in range(self.columns):
nilai = baris[column]
widget = self._widgets[row][column]
widget.configure(text=nilai)
self.kejadian()
psn.showinfo("pemberitahuan","Berhasil Ditampilkan")
## self.lblStatus.configure(state=DISABLED) # ini bisa di gunakan untuk maximize dan minimize
except :
psn.showwarning("Peringatan !", "Tidak ada file yang terbaca")
def onExit(self): # Fungsi untuk keluar dari program
if askyesno('Peringatan!', 'Anda ingin keluar?'):
play1 = PlaySound('SuaraMengunciMobil.wav', SND_FILENAME)
self.parent.destroy()
else:
showinfo('Pemberitahuan', 'Keluar dibatalkan')
class data_transaksi():
'''Membuat kelas data transaksi'''
def __init__(self,no=None,tanggal=None,nama=None,jumlah=None,harga=None,modal=None,sales=None):
self.no = no
self.tanggal = tanggal
self.nama = nama
self.jumlah = jumlah
self.harga = harga
self.modal = modal
self.sales = sales
if __name__ =='__main__': # Untuk menjalankan Tkinter atau GUI
root = Tk()
root.geometry("813x294+400+400")
root.resizable(False,False)
app = Tugas_GUI(root)
root.mainloop()
>> Dan berikut adalah berkas dari koperasi.CSV yang di gunakan sebagai data dan akan di import nantinya :
Demikianlah postingan kali ini saya sudahi sampai disini,,Semoga bisa diambil manfaatnya dengan bijak sana dan sini.
NO;TANGGAL;NAMA;JUMLAH;HARGA;MODAL;SALES
1;05/5/15;Amplop;15;1500;20000;JAYA
2;10/5/15;Buku;5;2000;8000;MAKMUR
3;13/5/15;Bolpen;12;2000;21500;BINTANG
4;22/5/15;Binder;7;4000;24000;MUTIARA
5;2/6/15;Cutter;8;8000;62000;MUNCUL
6;4/6/15;Penggaris;10;3000;27500;MAJU
7;28/6/15;Penghapus;15;2000;26000;SELARAS
8;28/6/15;Spidol;6;10000;57000;TOP
9;16/7/15;Tipe-x;8;7000;53000;HARAPAN
10;19/7/15;Folio;50;10000;435000;PRESTASI
1;05/5/15;Amplop;15;1500;20000;JAYA
2;10/5/15;Buku;5;2000;8000;MAKMUR
3;13/5/15;Bolpen;12;2000;21500;BINTANG
4;22/5/15;Binder;7;4000;24000;MUTIARA
5;2/6/15;Cutter;8;8000;62000;MUNCUL
6;4/6/15;Penggaris;10;3000;27500;MAJU
7;28/6/15;Penghapus;15;2000;26000;SELARAS
8;28/6/15;Spidol;6;10000;57000;TOP
9;16/7/15;Tipe-x;8;7000;53000;HARAPAN
10;19/7/15;Folio;50;10000;435000;PRESTASI
Demikianlah postingan kali ini saya sudahi sampai disini,,Semoga bisa diambil manfaatnya dengan bijak sana dan sini.
(وَ السَّلاَمُ عَلَيْكُمْ وَرَحْمَةُ
اللهِ وَبَرَكَاتُه)
Wassalamu 'alaikum Warahmatullaahi Wabarakaatuh