Bab 2. Gunakan Segera

Untuk memulai PyGTK, kita segera membuat program yang sederhana. Program ini ( haloindonesia.py ) menampilkan window dengan sebuah widget berupa tombol dengan tulisan "Halo Indonesia".

#!/usr/bin/env python

# contoh haloindonesia.py

import pygtk
pygtk.require('2.0')
import gtk

class HaloIndonesia:

    # Ini adalah fungsi callback. Argumen dalam contoh ini tidak digunakan.
    # Lihat fungsi callback yang lain di bawah
    def halo(self, widget, data=None):
        print "Halo Indonesia"

    def delete_event(self, widget, event, data=None):
        # Jika Anda mengembalikan nilai FALSE dalam penangkap signal
        # "delete_event", GTK akan mengeluarkan signal "destroy".
        # Mengembalikan nilai TRUE bararti window tidak akan dihancurkan.
        # Hal ini berguna untuk misalnya menampilkan dialog
        # "Apakah Anda yakin untuk keluar ?"
        
        print "Ini delete event"

        # Ubah nilai TRUE ke FALSE, lihat apa pengaruhnya
        return gtk.TRUE

    # Fungsi callback juga
    def destroy(self, widget, data=None):
        gtk.main_quit()

    def __init__(self):
        # membuat window baru
        self.window = gtk.Window(gtk.WINDOW_TOPLEVEL)
    
        # Jika window menerima signal "delete_event" (biasanya jika kita
        # klik mouse pada tombol silang di pojok kanan atas [win32]) maka
        # fungsi delete_event di atas akan di panggil
        self.window.connect("delete_event", self.delete_event)
    
        # Disini kita menghubungkan event "destroy" ke sebuah fungsi.
        # Event ini akan terjadi jika kita mengembalikan nilai FALSE dalam
        # callback "delete_event".
        self.window.connect("destroy", self.destroy)
    
        # Mengubah tebal batas
        self.window.set_border_width(10)
    
        # Membuat tombol dengan tulisan "Halo Indonesia"
        self.button = gtk.Button("Halo Indonesia")
    
        # Jika tombol ditekan tombol menerima signal "clicked" maka
        # fungsi halo() akan dipanggil.
        self.button.connect("clicked", self.halo, None)
    
        # Hal ini menyebabkan window dihancurkan jika tombol di tekan.
        self.button.connect_object("clicked", gtk.Widget.destroy, self.window)
    
        # Menempatkan tombol di dalam window
        self.window.add(self.button)
    
        # Meminta untuk menampilkan tombol
        self.button.show()
    
        # Kemudian menampilkan window
        self.window.show()

    def main(self):
        # Semua aplikasi PyGTK membutuhkan gtk.main() untuk menunggu masukkan
        # dari pengguna, misalnya klik mouse atau tombol keyboard ditekan.
        gtk.main()

# Jika program dijalankan langsung atau sebagai argumen dari perintah 'python'
# maka objek HaloIndonesia dibuat.
if __name__ == "__main__":
    halo = HaloIndonesia()
    halo.main()

Untuk menjalankan program di atas di lingkungan Linux Anda dapat menjalankan perintah :

[siapa@komputerku direktori]$ python haloindonesia.py

di dalam direktori di mana berkas haloindonesia.py berada.

Jika Anda membuat berkas haloindonesia.py dapat langsung dieksekusi maka Anda dapat langsung menjalankan :

[siapa@komputerku direktori]$ ./haloindonesia.py

Gambar 2.1. Halo Indonesia di Linux

Halo Indonesia di Linux

atau dalam lingkungan win32 akan seperti :

Gambar 2.2. Halo Indonesia di win32

Halo Indonesia di win32

Jika Anda menjalankannya dengan cara yang pertama, cobalah untuk menutup window dengan klik tombol silang di kanan atas window dan perhatikan apa yang tercetak pada console Anda. Kemudian tekan tombol "Halo Indonesia".

Selanjutnya kita akan mendalami bagian demi bagian dari program di atas.

#!/usr/bin/env python

Memberi tahu shell untuk menjalan skrip haloindonesia.py dengan perintah python serta menggunakan variabel lingkungan yang ada. Baris ini berlaku jika Anda menjalankan skrip haloindonesia.py langsung seperti contoh eksekusi yang kedua di atas.

# contoh haloindonesia.py

Baris ini adalah keterangan dari program. Karakter # adalah penanda bahwa sisa dari baris tersebut adalah keterangan.

import pygtk
pygtk.require('2.0')

Memberitahu python kita akan menggunakan modul pygtk. Namun kita akan menggunakan versi 2.0 dari pygtk. Kedua baris ini diperlukan jika Anda menginstalasi pygtk lebih dari satu versi. Namun jika hanya pygtk versi 2.0 saja yang terinstal, Anda tidak perlu menggunakan 2 baris ini.

import gtk

Kita gunakan modul gtk, serta inisialisasi lingkungan GTK+. Sepadan j ika kita menggunakan fungsi gtk_init() pada bahasa C.

class HaloIndonesia:

Baris ini menyatakan kelas baru dengan nama HaloIndonesia. Diikuti oleh beberapa fungsi dengan tujuan tertentu. Namun kita lihat dahulu ke bagian inisialisasi objek.

    def __init__(self):
        # membuat window baru
        self.window = gtk.Window(gtk.WINDOW_TOPLEVEL)

Membuat objek Window dengan jenis gtk.WINDOW_TOPLEVEL, yaitu window utama yang akan diatur oleh window-manager.

        self.window.connect("delete_event", self.delete_event)
        self.window.connect("destroy", self.destroy)

GTK+ menggunakan konsep signal untuk menangkap interaksi pengguna dengan objek-objeknya. Misalnya jika kita menekan (klik) mouse di atas sebuah objek tombol, maka signal 'clicked' akan diemisi oleh objek GTK+ (tombol) tersebut. Jika kita menghubungkan (connect) signal dengan fungsi tertentu maka fungsi ini akan dipanggil jika signal tersebut diemisi. Fungsi ini biasa disebut fungsi callback. Fungsi callback ini mempunyai beberapa kriteria tertentu namun yang utama adalah argumennya. Kita akan kembali kepada masalah signal dan fungsi callback pada bab berikut.

        self.window.set_border_width(10)

Mengubah dekorasi dari window dengan membuat lebar batas sebesar 10 pixel.

        self.button = gtk.Button("Halo Indonesia")

Membuat tombol dengan tulisan "Halo Indonesia" di dalamnya.

        self.button.connect("clicked", self.halo, None)
        self.button.connect_object("clicked", gtk.Widget.destroy, self.window)

Menghubungkan signal "clicked" pada tombol ke dua buah fungsi callback. Fungsi-fungsi ini akan dipanggil berurutan sesuai urutan pada saat dihubungkan. Jadi jika tombol di-klik maka pertama fungsi self.halo dijalankan baru kemudian fungsi gtk.Widget.destroy.

Keterangan bagian lain cukup jelas diberikan. Namun kita akan bahas pada bab-bab berikut.