Belajar Membuat Aplikasi GUI Berbasis Python dan GTK dengan 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 adalah sebuah library yang digunakan untuk membuat GUI (Graphical User Interface) pada Desktop Environment Gnome.
Hampir semua aplikasi Gnome dibuat dengan 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:
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.
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.
3. PyGObject
Cara install PyGObject bermacam-macam, bisa melalui PIP, bisa juga melalui package manager bawaan OS.
Install di Ubuntu/Debian:
Buka Terminal
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:
Buka Terminal
Ketik perintah berikut:
sudo dnf install python3-gobject gtk3
Install di MacOS:
Buka Terminal
Ketik perintah berikut:
brew install pygobject3 gtk+3
Install di Windows:
Nah, khusus untuk pengguna Windows.. cara instalnya sedikit berbeda.
Download dan Install MSYS2
Setelah itu, jalankan program
C:\msys64\mingw64.exe
Setelah jendela
mingw64.exe
muncul, ketik perintah berikut:pacman -Suy
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
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.
Cara install Glade:
sudo apt install glade
Nanti Glade akan kita pakai pada tutorial:
- Membuat GUI dengan PyGObject dan Glade
- Membuat GUI dengan PyGTK dan Glade
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:
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:
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:
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.
Simpan ikon dalam folder yang sama dengan file script program.
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:
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.