Untuk melakukan edit data terhadap data yang sudah ada bisa dilakukan dengan membuat form seperti form penambahan data dalam latihan sebelumnya. Perbedaannya pada data yang ditampilkan di form tersebut. Jika di form penambahan data kita menambahkan data baru sehingga formnya kosong, maka di form edit data ini data yang di edit perlu ditampilkan di form tersebut.
Kita manfaatkan treeview yang digunakan untuk menampilkan data untuk memilih data mana yang di edit. Untuk melakukan pengeditan, data yang akan diedit harus aktif/diseleksi dalam treeview. Dan yang diseleksi cukup satu baris data tidak boleh lebih dari satu. Jika tidak memenuhi akan dimunculkan kota pesan kalau tidak bisa melakukan pengeditan data.
Untuk melakukan modifikasi data kita perlu mengubah kode yang ada di fungsi tombol_edit_click(). Di dalamnya perlu dibuat rutin untuk menampilkan form modifikasi yang berisi kotak input untuk nik, nama, dan alamat. Juga perlu adanya tambahan tombol simpan dan batal. Penambahan kode untuk menangani ketika tombol simpan dan batal juga perlu ditambah.
Berikut modifikasi fungsi tombol_edit_click() yang perlu dilakukan:
Sedangkan penambahan fungsi tombol_edit_simpan() dan tombol_edit_batal() bisa dilakukan dengan kode berikut:
Berikut rutin lengkap dari latihan kali ini, untuk memudahkan Anda:
Tampilan program pengeditan data seperti berikut:
Untuk melakukan modifikasi data kita perlu mengubah kode yang ada di fungsi tombol_edit_click(). Di dalamnya perlu dibuat rutin untuk menampilkan form modifikasi yang berisi kotak input untuk nik, nama, dan alamat. Juga perlu adanya tambahan tombol simpan dan batal. Penambahan kode untuk menangani ketika tombol simpan dan batal juga perlu ditambah.
Berikut modifikasi fungsi tombol_edit_click() yang perlu dilakukan:
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)
Sedangkan penambahan fungsi tombol_edit_simpan() dan tombol_edit_batal() bisa dilakukan dengan kode berikut:
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()
Berikut rutin lengkap dari latihan kali ini, untuk memudahkan Anda:
# simpan sebagai gui09.py
# jalankan dengan perintah python gui09.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
msgbox.showinfo("Hapus Data", "Under Construction!", 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 program pengeditan data seperti berikut:
No comments:
Post a Comment