Ruby/GTK (Bagian 3: Widget dan Container)

Widget

Widget mirip dengan wijen: kecil, banyak dan ditempel-tempel (halah apasih). Maksudnya, komponen-komponen yang sering kita lihat di suatu program desktop seperti label, button, combo box dll. di GTK dikenal dengan istilah widget. Kita buat file untuk mengenal widget button yang pernah digunakan di postingan sebelumnya:

$> gedit rg003a.rb

#!/usr/bin/ruby
require "gtk2"
def keluar
    Gtk.main_quit
end 

win = Gtk::Window.new
win.resize(100, 50)
win.signal_connect("destroy") { keluar }

btn = Gtk::Button.new("Keluar")
btn.signal_connect("clicked") { keluar }
btn.show win.add(btn)

win.show
Gtk.main

Logika program di atas tidak jauh berbeda dengan yang dijabarkan di postingan sebelumnya, mungkin yang perlu ditambahkan adalah mengenai widget:

  • Daripada membuat blok program yang berulang karena digunakan di beberapa respon signal, kita buat method “keluar” yang bisa dipanggil oleh respon signal di bagian mana saja, salah satunya adalah ketika widget button “Keluar” diklik.
  • btn.show

    Berfungsi untuk menampilkan widget yang dimaksud. Jika method show tidak dipanggil maka widget tidak akan tampil walaupun sudah dimasukan ke suatu container.

  • win.add(btn)

    Mulai dikenal istilah container. Di contoh program, windows “win” merupakan container dimana kita bisa menambahkan widget “btn” ke container “win” tersebut dengan method add.

Container

Di contoh kita menambahkan hanya 1 widget (button) ke container window. Untuk memasukan banyak widget ke suatu container kita akan melakukan “packing widgets” yang umumnya memanfaatkan box (Gtk::HBox untuk mewadahi widget secara horisontal, Gtk::VBox untuk mewadahi widget secara vertikal) atau tabel. Untuk prakteknya buatlah file rg003b.rb yang berisi kode:

#!/usr/bin/ruby
require "gtk2"

def keluar
    Gtk.main_quit
end

def cetak
    nama = @teks.text
    puts "Nama: " + nama
end

label = Gtk::Label.new("Nama")
@teks = Gtk::Entry.new

btn = Gtk::Button.new("OK")
btn.signal_connect("clicked") { cetak }

box = Gtk::HBox.new
box.pack_start(label, false, false, 5)
box.pack_start(@teks)
box.pack_start(btn, false)

win = Gtk::Window.new
win.signal_connect("destroy") { keluar }

win.add(box)
win.show_all
Gtk.main

Eksekusi rogram di atas berupa form input yang akan mencetak nama yang dimasukan jika kita menekan tombol OK:

Penjelasan yang berkaitan dengan packing widgets:

  1. pack_start(child, expand, fill, padding)

    Method tersebut berfungsi untuk memasukan para child widgets ke dalam container sambil memasukan parameter untuk childe tersebut.
    Child = obyek widget yang dimasukan,contohnya “label” atau “btn”
    Expand (true/false) = apakah ukuran widget akan ikut mengembang jika ukuran container berubah
    Fill (true/false) = hanya berlaku jika expand true, apakah widget akan mengisi ukuran container yang mengembang dengan ikut mengembang atau hanya mengisi sekelilingnya dengan padding
    Padding = jarak widget dengan tepian

  2. win.show_all

    Menampilkan seluruh widget yang ada di container yang bersangkutan sehingga kita tidak perlu memanggil method show satu-persatu.

Referensi:

8 thoughts on “Ruby/GTK (Bagian 3: Widget dan Container)

  1. yeee katanya mo barengan/disamain aja supaya pembandingnya enak (wondering someone who encouraged to learn both of python and ruby comfortly), ya sutra back to free solo exploring lagi😛

  2. mas, tutor ruby-nya ada yang satu paket ga?? Maksudnya, jadi satu file archive ato pdf gitu.. Kalo ada bisa di donlot nih….

Leave a Reply

Fill in your details below or click an icon to log in:

WordPress.com Logo

You are commenting using your WordPress.com account. Log Out / Change )

Twitter picture

You are commenting using your Twitter account. Log Out / Change )

Facebook photo

You are commenting using your Facebook account. Log Out / Change )

Google+ photo

You are commenting using your Google+ account. Log Out / Change )

Connecting to %s