Tutorial 11: Graphical User Interface (GUI)

June 12, 2018 ยท View on GitHub

Daftar Isi


Definisi GUI

Graphical User Interface (GUI) adalah suatu antarmuka pengguna (user interface) di mana pengguna berinteraksi melalui objek-objek grafis (yang disebut widgets), seperti tombol (button), checkbox, menu, dsb. Dalam bahasa Python, kita dapat memanfaatkan module tkinter untuk membuat GUI.


tkinter

tkinter merupakan module GUI bawaan Python yang memanfaatkan toolkit GUI Tk. tkinter bersifat cross-platform dan dapat digunakan di Windows, Linux, maupun macOS. Module ini menyediakan berbagai elemen-elemen GUI (widgets) seperti tombol, menu, entri teks (text field), dsb. tkinter juga dapat digunakan untuk menerapkan event-driven programming, di mana GUI akan merespon ke berbagai event, misalnya aksi-aksi pengguna GUI seperti klik, ketik, scroll, dsb.

Di dalam module tkinter, terdapat berbagai class yang dapat digunakan untuk membuat GUI. Class Tk, misalnya, dapat digunakan untuk membuat window untuk menampung widgets.
Coba jalankan kode berikut, kemudian pahami dan modifikasi sesuka hati kalian.

import tkinter as tk

class MyFirstGUI:
    def __init__(self, master):
        self.master = master
        self.master.title("Kuy nge-GUI!")

        self.master.title("Kuy nge-GUI!")  # Mengubah judul window
        self.master.geometry("500x100")  # lebar: 500, tinggi: 100

        # Label adalah salah satu widget di tkinter
        # Argumen pertama pada widget constructor selalu parent container
        self.label = tk.Label(master, text="Contoh GUI Python")
        self.label.pack()  # Tempatkan labelnya di container

        self.greet_button = tk.Button(master, text="Sapa", command=self.sapa,
                                      fg="green")
        self.greet_button.pack()

        self.close_button = tk.Button(master, text="Keluar",
                                      command=master.destroy,
                                      bg="red", fg="white")
        self.close_button.pack()

    def sapa(self):
        print("Halo!")


root = tk.Tk()  # Membuat window
my_gui = MyFirstGUI(root)
root.mainloop() # Menjalankan event loop-nya tkinter

Event processing

Kita dapat memanfaatkan tkinter untuk menerapkan event-driven programming, yang berarti program yang kita buat akan merespon terhadap event, pada umumnya berupa aksi pengguna. Hal ini dispesifikasikan dalam method mainloop(). Method mainloop() membuat suatu event loop, yang akan memproses berbagai event terus menerus sampai window-nya ditutup.

Berikut adalah ilustrasi dari sebuah event loop.

Event loop

Suatu widget dapat diberi event handler (atau callback function) yang akan dieksekusi apabila suatu event terhadap widget itu terjadi, misalnya pada saat pengguna melakukan klik pada suatu tombol.

self.greet_button = tk.Button(master, text="Sapa", command=self.sapa)
self.close_button = tk.Button(master, text="Keluar", command=master.destroy)

Mengubah atribut suatu widget

Ketika membuat (construct) suatu widget, kita bisa memberi spesifikasi untuk atributnya, seperti text, command, dsb. Atribut-atribut tersebut dapat diubah dengan pendekatan ala dictionary, widget_name["nama_atribut"] = nilai_baru.
Perhatikan contoh berikut.

# class MyFirstGUI:
    def sapa(self):
        self.label["text"] = "Halo!"

Berbagai widget tkinter

Berikut adalah beberapa widget yang tersedia di tkinter.

WidgetDeskripsi
ButtonTombol sederhana, digunakan untuk menjalankan perintah.
CanvasArea untuk menampilkan elemen grafis seperti garis, segi empat, atau teks.
CheckbuttonCheck box untuk men-toggle antarnilai.
EntryEntri teks, disebut juga text field atau text box
FrameContainer untuk widget lainnya.
LabelMenampilkan teks atau gambar.
MenuPanel menu, untuk mengimplementasikan menu pull-down atau popup
MenubuttonTombol menu, untuk mengimplementasikan menu pull-down
MessageMirip dengan Label, tetapi bisa otomatis wrap sesuai ukuran tertentu.
RadiobuttonMenetapkan nilai variabel ke tombolnya dan mengosongkan Radiobutton lainnya.
TextTampilan teks yang dapat diberi berbagai format.

Berikut adalah ilustrasi untuk sebagian widget di atas.

  • Entry

Entry


  • Radiobutton

Radiobutton


  • Menu dan Menubutton

Menu and menubutton


  • Canvas dan sistem koordinatnya

Canvas 1

Canvas 2

Canvas 3


Geometry manager

tkinter menggunakan geometry manager untuk mengatur penempatan widget pada suatu container/window. Ada beberapa jenis geometry manager pada tkinter, seperti grid manager, pack manager, dan place manager. Tutorial kali ini hanya akan membahas pack manager dan grid manager. Pada contoh-contoh sebelumnya, kita sudah menggunakan pack manager.

Grid manager

Grid manager menempatkan widget pada suatu "tabel". Widget dapat ditempatkan pada cell di baris dan kolom tertentu. Kita bisa menggunakan rowspan dan columnspan agar suatu widget dapat menempati beberapa baris dan kolom.
Perhatikan contoh berikut.

import tkinter as tk

class MyGrid:
    def __init__(self, master):
        self.master = master
        master.title("Kuy nge-Grid!")
        message = tk.Message(master, text="Message of 3 rows and 2 columns")
        message.grid(row=1, column=1, rowspan=3, columnspan=2)
        tk.Label(master, text="First Name:").grid(row=1, column=3)
        tk.Entry(master).grid(row=1, column=4)
        tk.Label(master, text="Last Name:").grid(row=2, column=3)
        tk.Entry(master).grid(row=2, column=4)
        tk.Button(master, text="Get Name").grid(row=3, column=4)

root = tk.Tk()
my_grid = MyGrid(root)
root.mainloop()

Hasil:

Grid manager


Untuk mempelajari lebih lanjut tentang GUI menggunakan tkinter, silakan buka dokumentasinya dan referensi ini.



Diadaptasi dari:

  • DDP 1 - 14 - GUI_v1.3.pptx buatan Fariz Darari, Ph.D.

dengan beberapa perubahan.