Sunday, July 5, 2020

Menampilkan Data dalam Form

Form yang dibuat kemarin masih kosong. Belum ada datanya. Dalam latihan kali ini, kita akan menampilkan data mahasiswa yang terdiri atas kolom NIM, NAMA, dan ALAMAT. Data mahasiswa yang akan ditampilkan tersebut dipersiapkan terlebih dahulu. Hal ini dilakukan karena fungsi penambahan belum kita buat. Sehingga supaya datanya tampil, maka datanya kita buat secara manual.

Bagaimana cara membuatnya?


Data yang akan kita tampilkan ini kita buat secara manual terlebih dahulu. Kita buat file teks dengan pola tertentu supaya bisa kita tampilkan di form yang telah dibuat. Dalam aplikasi yang kompleks, data biasanya tersimpan di database / tabel sehingga bisa lebih mudah pengelolaannya. Akan tetapi untuk contoh kali ini kita akan membuat data yang disimpan dalam file teks.

Untuk latihan buatlah file teks dengan nama mhs.data dengan menggunakan editor yang Anda suka. Kalau di ubuntu banya pilihan editor yang bisa digunakan. Mulai dari murni CLI dengan menggunakan echo dan redirection, editor nano, editor joe, editor emacs, ataupun menggunakan editor GUI. Tentu saja menggunakan IDE yang lebih powerfull boleh dilakukan. Seperti pyCharm atau yang lainnya.

File mhs.data yang kita buat dengan pola seperti ini:

123456789#Putri Lutfiah#Kudus
123456790#Ade Irma#Jepara
123456791#Dandi Yudistira#Jepara
123456792#Wiku Saptanegara#Jepara
123456793#Wuri Destiyani#Kudus

Antar masing-masing kolom dipisah dengan menggunakan karakter #. Satu baris data menyatakan satu data mahasiswa. Tentu ini merupakan bentuk sederhana.

Untuk menampilkan data tersebut kedalam form yang telah disediakan sebelumnya, ada sejumlah langkah yang perlu dilakukan. Langkah pertama membaca file tersebut. Langkah selanjutnya adalah menambahkan data yang sudah dibaca ke dalam treeview dalam form yang telah disiapkan. Untuk itu, fungsi tombol_refresh_click() dalam rutin sebelumnya akan dimodifikasi untuk melakukan dua langkah tersebut. Berikut modifikasi yang perlu dilakukan terhadap fungsi tombol_refresh_click()


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)



Supaya pembacaan dan penambahan ke treeview bisa otomatis dijalankan setiap kali form pengelolaan data tampil, maka fungsi tombol_refresh_click() perlu dipanggil di fungsi data() yang berfungsi untuk menampilkan form pengelolaan data. Pemanggilan fungsi ini cukup sederhana hanya perlu menambahkan satu baris kode berikut ke dalam baris terakhir fungsi data()


    #Pemanggilan refresh data
    tombol_refresh_click()


Untuk memudahkan mencoba latihan ini, berikut rutin lengkap dari latihan ini:



# simpan sebagai gui07.py
# jalankan dengan perintah python gui07.py

import tkinter as tk
import tkinter.ttk as ttk
import tkinter.messagebox as msgbox


def tombol_tambah_click():
    global formData
    msgbox.showinfo("Tambah Data", "Under Construction!", parent=formData)

def tombol_edit_click():
    global formData
    msgbox.showinfo("Edit Data", "Under Construction!", 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()


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 form pengelolaan data bisa dilihat pada gambar berikut:





Ok. Selamat Mencoba!

No comments: