Tibalah saatnya di latihan terakhir kita. Setelah penambahan data, modifikasi data, tentu terakhir adalah penghapusan data. Untuk penghapusan data ini, kita tidak perlu membuat form tersendiri. Kita cukup memanfaatkan kotak dialog berisi pesan. Pesan untuk menanyakan apakah pengguna aplikasi yakin untuk menghapus data atau tidak.
Untuk melakukan penghapusan data kita perlu memodifikasi kode yang ada di fungsi tombol_hapus_click(). Langkah-langkah yang perlu dilakukan meliputi:
Kode-kode perubahan yang ada di fungsi tombol_hapus_click() seperti berikut ini:
Kelima langkah yang disyaratkan di atas sudah terpenuhi dalam fungsi tombol_hapus_click(). Program lengkap dari latihan kita ini bisa Anda lihat dalam listing berikut ini:
Tampilan programnya seperti terlihat pada gambar berikut:
Ok, Selamat Mencoba!
- Pastikan hanya satu baris data yang diseleksi
- Menanyakan apakah yakin untuk menghapus
- Jika iya, lakukan penghapusan
- Simpan data
- Refresh Data
Kode-kode perubahan yang ada di fungsi tombol_hapus_click() seperti berikut ini:
def tombol_hapus_click():
global formData
global tv
global data_mhs
selection = tv.selection()
if len(selection) == 1:
cur = tv.focus()
item = tv.item(cur)
nomor = int(item['text'])
msg = "Yakin melakukan penghapusan data ini: \nNIM: {}\nNama: {}\nAlamat: {}\n".format(*item['values'])
if msgbox.askyesno("Hapus Data", msg, parent=formData) ==True:
del (data_mhs[nomor-1])
simpan(data_mhs)
tombol_refresh_click()
else:
msgbox.showinfo("Hapus Data", "Tolong pilih 1 baris data saja!", parent=formData)
Kelima langkah yang disyaratkan di atas sudah terpenuhi dalam fungsi tombol_hapus_click(). Program lengkap dari latihan kita ini bisa Anda lihat dalam listing berikut ini:
# simpan sebagai gui10.py
# jalankan dengan perintah python gui10.py
import tkinter as tk
import tkinter.ttk as ttk
import tkinter.messagebox as msgbox
def simpan(data):
f = open('mhs.data', 'wt')
for item in data:
if len(item)==3:
f.write("{}#{}#{}\n".format(item[0], item[1], item[2]))
f.close()
def tombol_tambah_simpan():
global formTambah
global data_mhs
global txNim
global txNama
global txAlamat
databaru = [txNim.get(), txNama.get(), txAlamat.get()]
data_mhs.append(databaru)
simpan(data_mhs)
formTambah.destroy()
tombol_refresh_click()
def tombol_tambah_batal():
global formTambah
if msgbox.askyesno("Tambah Data", "Yakin batal menambahkan data ?", parent=formTambah) == True:
formTambah.destroy()
def tombol_tambah_click():
global formData
global formTambah
global txNim
global txNama
global txAlamat
formTambah = tk.Toplevel(formData)
formTambah.title("Tambah Data Mahasiswa")
frameTambah = tk.Frame(formTambah)
#entri untuk NIM
frameNIM = tk.Frame(frameTambah)
lbNim = tk.Label(frameNIM, text="NIM", width=10)
txNim = tk.Entry(frameNIM, width=20)
lbNim.pack(side=tk.LEFT, anchor='w')
txNim.pack(side=tk.LEFT, anchor='e')
frameNIM.pack(side=tk.TOP, anchor='w')
#entri untuk NAMA
frameNAMA = tk.Frame(frameTambah)
lbNama = tk.Label(frameNAMA, text="NAMA", width=10)
txNama = tk.Entry(frameNAMA, width=30)
lbNama.pack(side=tk.LEFT, anchor='w')
txNama.pack(side=tk.LEFT, anchor='e')
frameNAMA.pack(side=tk.TOP, anchor='w')
#entri untuk Alamat
frameALAMAT = tk.Frame(frameTambah)
lbAlamat = tk.Label(frameALAMAT, text="ALAMAT", width=10)
txAlamat = tk.Entry(frameALAMAT, width=50)
lbAlamat.pack(side=tk.LEFT, anchor='w')
txAlamat.pack(side=tk.LEFT, anchor='e')
frameALAMAT.pack(side=tk.TOP)
#Tombol
frameTOMBOL = tk.Frame(frameTambah)
btnSimpan = tk.Button(frameTOMBOL, text="Simpan", width=10, command=tombol_tambah_simpan)
btnCancel = tk.Button(frameTOMBOL, text="Batal", width=10, command=tombol_tambah_batal)
btnSimpan.pack(side=tk.LEFT)
btnCancel.pack(side=tk.LEFT)
frameTOMBOL.pack(side=tk.BOTTOM)
frameTambah.pack()
# msgbox.showinfo("Tambah Data", "Under Construction!", parent=formData)
def tombol_edit_simpan():
global formData
global formEdit
global txNim
global txNama
global txAlamat
global tv
global data_mhs
selection = tv.selection()
if len(selection)==1:
cur = tv.focus()
item = tv.item(cur)
record = int(item['text'])
data_mhs[record-1][0] = txNim.get()
data_mhs[record-1][1] = txNama.get()
data_mhs[record-1][2] = txAlamat.get()
simpan(data_mhs)
formEdit.destroy()
tombol_refresh_click()
def tombol_edit_batal():
global formEdit
if msgbox.askyesno("Edit Data", "Yakin batal modifikasi data ?", parent=formEdit) == True:
formEdit.destroy()
def tombol_edit_click():
global formData
global tv
global formEdit
global txNim
global txNama
global txAlamat
selection = tv.selection()
if len(selection) == 1:
cur = tv.focus()
item = tv.item(cur)
formEdit = tk.Toplevel(formData)
formEdit.title("Edit Data Mahasiswa")
frameEdit = tk.Frame(formEdit)
# entri untuk NIM
frameNIM = tk.Frame(frameEdit)
lbNim = tk.Label(frameNIM, text="NIM", width=10)
txNim = tk.Entry(frameNIM, width=20)
lbNim.pack(side=tk.LEFT, anchor='w')
txNim.pack(side=tk.LEFT, anchor='e')
frameNIM.pack(side=tk.TOP, anchor='w')
# entri untuk NAMA
frameNAMA = tk.Frame(frameEdit)
lbNama = tk.Label(frameNAMA, text="NAMA", width=10)
txNama = tk.Entry(frameNAMA, width=30)
lbNama.pack(side=tk.LEFT, anchor='w')
txNama.pack(side=tk.LEFT, anchor='e')
frameNAMA.pack(side=tk.TOP, anchor='w')
# entri untuk Alamat
frameALAMAT = tk.Frame(frameEdit)
lbAlamat = tk.Label(frameALAMAT, text="ALAMAT", width=10)
txAlamat = tk.Entry(frameALAMAT, width=50)
lbAlamat.pack(side=tk.LEFT, anchor='w')
txAlamat.pack(side=tk.LEFT, anchor='e')
frameALAMAT.pack(side=tk.TOP)
# Tombol
frameTOMBOL = tk.Frame(frameEdit)
btnSimpan = tk.Button(frameTOMBOL, text="Simpan", width=10, command=tombol_edit_simpan)
btnCancel = tk.Button(frameTOMBOL, text="Batal", width=10, command=tombol_edit_batal)
btnSimpan.pack(side=tk.LEFT)
btnCancel.pack(side=tk.LEFT)
frameTOMBOL.pack(side=tk.BOTTOM)
#PENGISIAN DATA YANG MAU DI EDIT
txNim.delete(0, tk.END)
txNim.insert(0, item['values'][0])
txNama.delete(0, tk.END)
txNama.insert(0, item['values'][1])
txAlamat.delete(0, tk.END)
txAlamat.insert(0, item['values'][2])
frameEdit.pack()
else:
msgbox.showinfo("Edit Data", "Tolong select 1 baris data saja!", parent=formData)
def tombol_hapus_click():
global formData
global tv
global data_mhs
selection = tv.selection()
if len(selection) == 1:
cur = tv.focus()
item = tv.item(cur)
nomor = int(item['text'])
msg = "Yakin melakukan penghapusan data ini: \nNIM: {}\nNama: {}\nAlamat: {}\n".format(*item['values'])
if msgbox.askyesno("Hapus Data", msg, parent=formData) ==True:
del (data_mhs[nomor-1])
simpan(data_mhs)
tombol_refresh_click()
else:
msgbox.showinfo("Hapus Data", "Tolong pilih 1 baris data saja!", parent=formData)
def tombol_refresh_click():
global formData
global tv
global data_mhs
data_mhs = []
try:
file = open("mhs.data", "rt")
data = file.read()
file.close()
data_baris = data.split("\n")
for baris in data_baris:
item = baris.split("#")
if len(item) == 3:
data_mhs.append((item))
except:
'''kosong'''
#Hapus dulu yang ada
for i in tv.get_children():
tv.delete(i)
#tampilkan di treeview
i=0
for mhs in data_mhs:
i=i+1
tv.insert("","end", text=str(i), values=mhs)
def tombol_tutup_click():
global formData
hasil = msgbox.askyesno("Tutup", "Anda yakin nutup form?", parent=formData)
if hasil==True:
formData.destroy()
def data():
global win
global formData
global tv
formData = tk.Toplevel(win)
formData.title("Data Mahasiswa")
# membuat kotak dalam form untuk tombol/entrian yang akan kita buat nantinya
frame = tk.Frame(formData)
tv = tk.ttk.Treeview(frame)
tv['columns'] = ('Nim', 'Nama', 'Alamat')
tv.heading("#0", text='No')
tv.column("#0", anchor="w", width=50)
tv.heading('Nim', text='Nim')
tv.column('Nim', anchor='center', width=100)
tv.heading('Nama', text='Nama')
tv.column('Nama', anchor='center', width=200)
tv.heading('Alamat', text='Alamat')
tv.column('Alamat', anchor='center', width=300)
btnFrame = tk.Frame(frame)
tambah = tk.Button(btnFrame, text="Tambah", width=15, command=tombol_tambah_click)
edit = tk.Button(btnFrame, text="Edit", width=15, command=tombol_edit_click)
hapus = tk.Button(btnFrame, text="Hapus", width=15, command=tombol_hapus_click)
refresh = tk.Button(btnFrame, text="Refresh", width=15, command=tombol_refresh_click)
tutup = tk.Button(btnFrame, text="Tutup", width=15, command=tombol_tutup_click)
tv.pack()
tambah.pack(side=tk.LEFT)
edit.pack(side=tk.LEFT)
hapus.pack(side=tk.LEFT)
refresh.pack(side=tk.LEFT)
tutup.pack(side=tk.LEFT)
btnFrame.pack(side=tk.BOTTOM)
frame.pack()
#Pemanggilan refresh data
tombol_refresh_click()
def keluar():
global win
win.quit()
data_mhs=[]
win = tk.Tk()
win.title("Sistem Informasi")
win.geometry('800x600')
menubar = tk.Menu(win)
appmenu = tk.Menu(menubar)
appmenu.add_command(label='Data Mahasiswa', command=data)
appmenu.add_separator()
appmenu.add_command(label='Keluar', command=keluar)
menubar.add_cascade(label='Data', menu=appmenu)
win.config(menu=menubar)
win.mainloop()
Tampilan programnya seperti terlihat pada gambar berikut:
Ok, Selamat Mencoba!
No comments:
Post a Comment