Bab 3. Teori Signal dan Callback

Catatan

Dalam GTK+ versi 2.0, sistem signal telah dipindahkan dari GTK ke GLib. Namun kita tidak akan membahas hal ini karena tidak merubah cara penggunaan signal pada PyGTK.

Kita akan mengenal signal dan callback secara lebih detil. GTK adalah toolkit yang bersifat event-drivent. Dalam implementasinya, iterasi (looping) dalam gtk.main() akan menunggu sampai ada event tertentu yang menyebabkan fungsi yang berhubungan dipanggil. Sistem pemanggilan fungsi ini menggunakan konsep yang disebut "signal". Jika terjadi suatu event, misalnya pengguna menekan tombol pada mouse, signal tertentu akan diemisi (emitted) oleh widget yang bersangkutan. (Sebagai catatan, signal disini tidak sama dengan signal pada sistem operasi Unix meskipun menggunakan istilah yang sama.)

Untuk membuat, misalnya, sebuah tombol melakukan tugasnya, kita menyiapkan fungsi dan menghubungkannya dengan signal dari tombol. Bentuk umum untuk melakukan hal ini adalah :

    connect(nama_signal,fungsi_callback,...)
nama_signal

nama signal berupa string

fungsi_callback

fungsi yang dipanggil jika ada signal. Dapat dalam bentuk :

def fungsi_callback(widget,...)
def method_callback(self,widget,...)

...

parameter tambahan jika ada

Method connect menambahkan fungsi_callback() ke belakang dari daftar pelaksana signal untuk signal yang bernama nama_signal namun sebelum pelaksana default dari signal. Parameter tambahan dapat dinyatakan setelah parameter fungsi_callback(). Kumpulan parameter ini akan diteruskan sebagai parameter untuk fungsi_callback().

Sebagai contoh :

    handler_id = objek.connect("nama_signal", fungsi_callback, arg1, arg2, arg3)

Maka pelaksana signal (fungsi_callback):

    def fungsi_callback(objek, arg1, arg2, arg3):

Jika sebagai method objek definisinya :

    def fungsi_callback(self, object, arg1, arg2, arg3):

Eksepsi TypeError akan diajukan jika "nama_signal" tidak berhubungan dengan objeknya.

Cara lain menghubungkan signal dengan fungsi callback adalah :

    connect_object(nama_signal,fungsi_callback,objek)
nama_signal

nama signal berupa string

fungsi_callback

fungsi yang dipanggil jika ada signal

objek

objek dengan tipe GObject

Method connect_object() sama dengan connect() dengan perbedaannya : fungsi_callback akan dipanggil sebagai method objek dari parameter objek. Contoh :

    handler_id = object("signal_name", handler, gobject)

maka handler akan dipanggil sebagai :

    handler(gobject)

Hal ini berguna saat method widget diperlukan sebagai pelaksana signal (contoh : widget.destroy()). Kita dapat menyatakan method kelas sebagai pelaksana signal. Misalnya, sebuah tombol dengan signal "clicked" akan memanggil Window.destroy() :

    handler_id = button.connect_object("clicked", Window.destroy, window)

Jika tombol ditekan akan memanggil :

    Window.destroy(window)

yang sama artinya dengan :

    window.destroy()

Parameter yang lain akan digunakan sama seperti penggunaan method connect().