author Ahmad Muhardian

Belajar Membuat Aplikasi GUI Berbasis Python dan GTK dengan PyGObject


Tutorial PyGObject

Sebelumnya, saya sudah membahas cara membuat aplikasi GUI dengan Python dan PyGTK.

Namun, kekurangan dari PyGTK adalah tidak mendukung untuk GTK 3. Oleh sebab itu, saya membuat tutorial PyGObject.

Pada tutorial ini, kita akan belajar dasar dari PyGObject untuk membuat aplikasi GUI.

Mulai dari mengenal apa itu PyGObject, menyiapkan peralatan untuk belajar, hingga membuat program.

Mari kita mulai..

Apa itu GTK?

Sebelum kita membahas PyGObject, kita bahas dulu tentang GTK.

Jadi apa itu GTK?

GTK merupakan singkatan dari GIMP Toolkit. Dinamakan GTK karena dibuat bersamaan dengan proyek GIMP.

gtk lead

GTK adalah sebuah library yang digunakan untuk membuat GUI (Graphical User Interface) pada Desktop Environment Gnome.

Hampir semua aplikasi Gnome dibuat dengan GTK.

gnome app gtk

Tenang saja.. meskipun awalnya dibuat untuk digunakan pada Gnome, kita juga bisa menggunakannya pada DE yang lain seperti KDE, bahkan juga Windows dan Mac.

Tapi masalahnya:

GTK merupakan library untuk bahasa C dan C++ dan ini tidak akan bisa langsung di gunakan pada Python.

Terus bagaimana donk?

Maka dibuatlah PyGObject.

Apa itu PyGObject?

PyGObject adalah modul Python yang berisi library GObject seperti GTK, GStreamer, WebKitGTK, GLib, GIO, dll.

GObject merupakan library bahasa C/C++ yang berisi beberapa library.

PyGObject adalah binding atau pengikat library yang ada di dalam GObject. Sehingga library tersebut akan bisa digunakan pada Python.

Coba perhatikan gambar berikut:

Cara kerja PyGObject

Pada gambar tersebut, ada libgtk-3.so yang merupakan library GTK 3 untuk bahasa C dan C++. Berkat PyGObject, kita akan bisa menggunakannya pada Python.

Persiapan dan Instalasi

Peralatan yang perlu dipersiapkan untuk mulai belajar PyGObject adalah sebagai berikut:

1. Teks Editor

Teks editor bebas mau menggunakan teks editor apa saja. Bisa GEdit, Kate, Geany, VS Code, Atom, dll.

Saran saya:

Gunakanlah Teks editor yang kamu sukai dan bisa dioperasikan.

Saya sendiri akan menggunakan VS Code untuk Tutorial ini.

text editor vscode

2. Python

Python yang akan digunakan pada tutorial ini adalah Python 3. Pastikan Python 3 sudah terinstal di komputermu.

Silakan ketik perintah python3 --version untuk mengeceknya.

versi python

3. PyGObject

Cara install PyGObject bermacam-macam, bisa melalui PIP, bisa juga melalui package manager bawaan OS.

Install di Ubuntu/Debian:

  1. Buka Terminal

  2. Ketik perintah berikut untuk install PyGObject id Ubuntu/Debian

    sudo apt install python3-gi python3-gi-cairo gir1.2-gtk-3.0

Install di Fedora:

  1. Buka Terminal

  2. Ketik perintah berikut:

    sudo dnf install python3-gobject gtk3

Install di MacOS:

  1. Buka Terminal

  2. Ketik perintah berikut:

    brew install pygobject3 gtk+3

Install di Windows:

Nah, khusus untuk pengguna Windows.. cara instalnya sedikit berbeda.

  1. Download dan Install MSYS2

  2. Setelah itu, jalankan program C:\msys64\mingw64.exe

  3. Setelah jendela mingw64.exe muncul, ketik perintah berikut:

    pacman -Suy
  4. Setelah itu jalankan perintah berikut untuk menginstal PyGObject:

    pacman -S mingw-w64-x86_64-gtk3 mingw-w64-x86_64-python3 mingw-w64-x86_64-python3-gobject
  5. Selsai.

Alternatif di Windows: bisa juga menginstal PyGObject melalui WSL dengan sistem operasi Linux.

Untuk instalasi di sistem operasi dan distro lainnya, silakan cek di Dokumentasi PyGObject.

4. Glade (Opsional)

Glade akan kita gunakan untuk membuat GUI. Pada tutorial ini, kita belum akan menggunakan Glade, namun ada baiknya diinstal sekarang.

Glade untuk membuat GUI GTK

Cara install Glade:

sudo apt install glade

Nanti Glade akan kita pakai pada tutorial:

Membuat Program Pertama

Jika semua sudah siap, saat kita mencoba membuat program GUI pertama.

Buatlah file baru dengan nama hello_world.py dengan isi sebagai berikut:

import gi
gi.require_version('Gtk', '3.0')
from gi.repository import Gtk

window = Gtk.Window()
window.set_title("Hello World App")
window.set_size_request(640, 360)
window.connect('destroy', Gtk.main_quit)
window.show_all()

Gtk.main()

Setelah itu, coba eksekusi file hello_world.py dengan perintah:

python3 hello_world.py

Maka hasilnya:

hello world pygobject gtk

Penjelasan program:

Pertama-tama, kita mengimpor gi ini merupakan objek untuk mengakses library yang ada di PyGObject. Setelah itu, kita menentukan versi GTK yang akan digunakan, yakni 3.0.

import gi
gi.require_version('Gtk', '3.0')

Setelah itu, kita impor class Gtk dari gi.repository.

from gi.repository import Gtk

Sekarang kita bisa menggunakan Class Gtk untuk membuat object widget. Pada contoh di atas, kita membuat object widget window dari class Window().

window = Gtk.Window()

Widget Gtk.Window() merupakan widget toplevel atau Widget yang harus berada di paling atas dalam susuan Widget.

Ngomong-ngomong apa itu Widget?

Widget itu adalah object GUI dari GTK. Object ini berisi properti-properti dan juga method untuk mengatur perilaku object.

GTK sendiri punya banyak widget yang bisa kita gunakan untuk membangun GUI. Semua widget ini tidak perlu dihafal, cukup dipahami cara pakainya dan kalau kebingungan tinggal cari tau di dokumentasi.

Contoh Widget yang lainnya:

widget

Contoh lainnya bisa juga di lihat di GTK Widget Gallery.

Lanjut..

Pada kode berikutnya, kita memanggil beberapa method dari widget window.

# memberikan judul pada jendela
window.set_title("Hello World App")

# menentukan ukuran jendela
window.set_size_request(640, 360)

# menentukan aksi yang harus dilakukan saat jendela ditutup
window.connect('destroy', Gtk.main_quit)

# menampilkan jendela
window.show_all()

Terakhir..

Kita harus mengeksekusi GTK main loop:

Gtk.main()

Tujuannya agar program selalu tetap dibuka.

Jika kita tidak menggunakan GTK main loop, maka program akan langsung ditutup begitu semua script selesai dieksekusi.

Membuat Program Secara OOP

Kita baru saja membuat program GTK dengan PyGObject, namun tidak dilakukan dengan OOP.

Nantinya, saat kita membuat program yang kompleks, OOP akan sangat membantu dan memudahkan kita menulis program.

Lalu, bagaimana caranya membuat program GUI dengan OOP.

Caranya, kita perlu membuat class sendiri lalu memanfaatkan kelas tersebut dengan membuat objek untuk melakukan tindakan tertentu.

Biar lebih jelas..

Mari kita coba.

Buatlah file baru dengan nama hello_world_oop.py, kemudian isi kodenya seperti ini:

import gi
gi.require_version('Gtk', '3.0')
from gi.repository import Gtk

class MainWindow(Gtk.Window):
    def __init__(self):
        Gtk.Window.__init__(self)

        self._initUI()
    
    def _initUI(self):
        self.set_title("App Hello World dengan OOP")
        self.set_size_request(640, 360)
        self.connect('destroy', Gtk.main_quit)

        self.label = Gtk.Label("Aplikasi GTK dengan Python")
        self.add(self.label)

        self.show_all()


# main
if __name__ == "__main__":
    MainWindow()
    Gtk.main()

Hasilnya:

hello world oop

Penjelasan:

Pada contoh di atas, kita membuat class GtkWindow sendiri dengan nama MainWindow(). Class MainWindow() merupakan class yang diturunkan dari class Gtk.Window().

class MainWindow(Gtk.Window):
    ...

Lalu di dalamnya kita harus memanggil konstruktor class Gtk.Window().

def __init__(self):
        Gtk.Window.__init__(self)

        self._initUI()

Pada konstruktor ini, kita juga memanggil method _initUI() untuk menyiapkan widget.

Isi dari method _initUI() adalah persiapan widget untuk ditampilkan. Objek self di sini mengacu pada class itu sendiri, yakni MainWindow().

Karena MainWindow() diturunkan dari class Gtk.Window(), maka ia akan bisa menggunakan method-method yang ada di dalam Gtk.Window().

Pada method _initUI(), kita menggunakan widget Gtk.Label() untuk menampilkan teks, lalu menambahkannya ke dalam widget Gtk.Window().

self.label = Gtk.Label("Aplikasi GTK dengan Python")
self.add(self.label)

Terakhir, kita menjalankan class MainWindow() pada blok main.

# main
if __name__ == "__main__":
    MainWindow()
    Gtk.main()

Menambahkan Ikon pada Window

Ikon biasanya akan ditampilkan pada bagian pojok dari jendela. Sebelum menambahkan ikon, siapkan dulu file ikonnya. Gunakan format PNG.

📥 Download icon.png

Simpan ikon dalam folder yang sama dengan file script program.

ikon-file

Setelah itu, kita bisa tambahkan ikon ini pada widget GtkWindow dengan memanggil method set_icon_from_file().

set_icon_from_file("icon.png")

Sehingga kode lengkap program akan menjadi seperti ini:

import gi
gi.require_version('Gtk', '3.0')
from gi.repository import Gtk

class MainWindow(Gtk.Window):
    def __init__(self):
        Gtk.Window.__init__(self)

        self._initUI()
    
    def _initUI(self):
        self.set_title("App Hello World dengan OOP")
        self.set_size_request(640, 360)
        self.set_icon_from_file("icon.png")
        self.connect('destroy', Gtk.main_quit)

        self.label = Gtk.Label("Aplikasi GTK dengan Python")
        self.add(self.label)

        self.show_all()


# main
if __name__ == "__main__":
    MainWindow()
    Gtk.main()

Hasilnya:

ikon program

Apa Selanjutnya?

Membuat aplikasi GUI dengan GTK tidaklah sulit, hanya saja kita perlu terbiasa dengan widget-widget yang disediakan GTK.

Pada tutorial ini, kita sudah mengenal dua widget, yakni Gtk.Window() dan Gtk.Label(). Masih banyak widget yang belum kita coba.

Pada tutorial berikutnya, kita akan mencoba berbagai macam widget seperti Container, Control, dan Toplevel lainnya.