[翻译]Ruby GTK教程3——控件

控件

在这部分的Ruby GTK编程教程中我们将提到一些控件。


控件是GUI应用程序的基本构成。这些年来一些控件成为了所有平台所有套件的标准。如按钮、复选框或者滚动条。GTK套件的理念是保持控件的数量为最小的数量级,一些特殊的控件需要创建为自定义GTK控件。


复选按钮(CheckButton)


CheckButton是一个有两种状态的控件,开和关。开状态表示选中。它用于表示一些布尔属性。


#!/usr/bin/ruby

# ZetCode Ruby GTK tutorial
#
# This program toggles the title of the
# window with the CheckButton widget
#
# author: jan bodnar
# website: www.zetcode.com
# last modified: April 2009

require ‘gtk2’

class RubyApp < Gtk::Window
def initialize
super

set_title “CheckButton”
signal_connect “destroy” do
Gtk.main_quit
end

init_ui

set_default_size 250, 200
set_window_position Gtk::Window::POS_CENTER
show_all
end


def init_ui

fixed = Gtk::Fixed.new
add fixed

cb = Gtk::CheckButton.new “Show title”
cb.set_active true
cb.set_can_focus false
cb.signal_connect(“clicked”) do |w|
on_clicked(w)
end

fixed.put cb, 50, 50

end

def on_clicked sender

if sender.active?
self.set_title “Check Button”
else
self.set_title “”
end
end
end

Gtk.init
window = RubyApp.new
Gtk.main

我们将根据复选按钮的状态在窗口的标题栏显示一个标题。


cb = Gtk::CheckButton.new “Show title”

创建CheckButton控件。


cb.set_active true

标题默认是可见的,因此我们将按钮默认选中。


if sender.active?
self.set_title “Check Button”
else
self.set_title “”
end

如果按钮选中则显示标题。


image1

图片:复选按钮


标签(Label)


Label控件用于显示文本。


#!/usr/bin/ruby

# ZetCode Ruby GTK tutorial
#
# This example demonstrates the Label widget
#
# author: jan bodnar
# website: www.zetcode.com
# last modified: June 2009

require ‘gtk2’

$lyrics = %{Meet you downstairs in the bar and heard
your rolled up sleeves and your skull t-shirt
You say why did you do it with him today?
and sniff me out like I was Tanqueray

cause you’re my fella, my guy
hand me your stella and fly
by the time I’m out the door
you tear men down like Roger Moore

I cheated myself
like I knew I would
I told ya, I was trouble
you know that I’m no good}


class RubyApp < Gtk::Window

def initialize
super

set_title “You know I’m no Good”
signal_connect “destroy” do
Gtk.main_quit
end

init_ui

set_default_size 250, 200
set_window_position Gtk::Window::POS_CENTER

show_all
end

def init_ui

set_border_width 10
label = Gtk::Label.new $lyrics
add label

end
end

Gtk.init
window = RubyApp.new
Gtk.main

例子在窗口上显示了一些歌词。


 $lyrics = %{Meet you downstairs in the bar and heard
your rolled up sleeves and your skull t-shirt


创建一个多行文本。


set_border_width 10

标签被一些空白空间包围着。


label = Gtk::Label.new $lyrics
add label

创建标签并添加到窗口内。


image2

图片:标签控件


输入框(Entry)


Entry是单行文本输入字段,用于文本数据的输入。


#!/usr/bin/ruby

# ZetCode Ruby GTK tutorial
#
# This example demonstrates the Entry widget
#
# author: jan bodnar
# website: www.zetcode.com
# last modified: June 2009

require ‘gtk2’


class RubyApp < Gtk::Window

def initialize
super

set_title “Entry”
signal_connect “destroy” do
Gtk.main_quit
end

init_ui

set_default_size 250, 200
set_window_position Gtk::Window::POS_CENTER

show_all
end

def init_ui

fixed = Gtk::Fixed.new

label = Gtk::Label.new “…”
fixed.put label, 60, 40

entry = Gtk::Entry.new
fixed.put entry, 60, 100

entry.signal_connect “key-release-event” do |w, e|
on_key_release(w, e, label)
end

add(fixed)
end

def on_key_release sender, event, label
label.set_text sender.text
end
end

Gtk.init
window = RubyApp.new
Gtk.main

这个例子显示了一个输入控件和一个标签。我们在输入框输入的文本会立即在标签上显示。


entry = Gtk::Entry.new

创建Entry控件。


entry.signal_connect “key-release-event” do |w, e|
on_key_release(w, e, label)
end

我们将on_key_release方法插到Entry控件的key-release-event事件中。


def on_key_release sender, event, label
label.set_text sender.text
end

从Entry控件获取文本并设置到标签中。


image3

图片:Entry控件


图片(Image)


Image控件用于显示图片。


#!/usr/bin/ruby

# ZetCode Ruby GTK tutorial
#
# This example demonstrates the Image widget
#
# author: jan bodnar
# website: www.zetcode.com
# last modified: June 2009

require ‘gtk2’


class RubyApp < Gtk::Window

def initialize
super

set_title “Red Rock”
signal_connect “destroy” do
Gtk.main_quit
end

init_ui

set_default_size 250, 200
set_window_position Gtk::Window::POS_CENTER

show_all
end

def init_ui

set_border_width 2

begin
image = Gtk::Image.new “redrock.png”
rescue
puts “cannot load image”
exit
end

add image
end

end

Gtk.init
window = RubyApp.new
Gtk.main

我们例子在窗口上显示了一个图片。


set_border_width 2

我们在图片周围添加一些空白边框。


begin
image = Gtk::Image.new “redrock.png”
rescue
puts “cannot load image”
exit
end

创建Image控件。IO操作容易出现错误,因此我们处理可能的异常。


add image

将控件添加到容器中。


image4

图片:Image控件


下拉框(ComboBox)


ComboBox控件允许用户从一个列表选项中进行选择。


#!/usr/bin/ruby

# ZetCode Ruby GTK tutorial
#
# This example demonstrates the ComboBox widget
#
# author: jan bodnar
# website: www.zetcode.com
# last modified: June 2009

require ‘gtk2’


class RubyApp < Gtk::Window

def initialize
super

set_title “ComboBox”
signal_connect “destroy” do
Gtk.main_quit
end

init_ui

set_default_size 250, 200
set_window_position Gtk::Window::POS_CENTER

show_all
end

def init_ui

fixed = Gtk::Fixed.new
label = Gtk::Label.new ‘-‘
fixed.put label, 50, 140

cb = Gtk::ComboBox.new
cb.signal_connect “changed” do |w, e|
on_changed(w, e, label)
end

cb.append_text ‘Ubuntu’
cb.append_text ‘Mandriva’
cb.append_text ‘Redhat’
cb.append_text ‘Gento’
cb.append_text ‘Mint’

fixed.put cb, 50, 30

add fixed

end

def on_changed sender, event, label
label.set_label sender.active_text
end
end

Gtk.init
window = RubyApp.new
Gtk.main

这个例子显示了一个下拉框和一个标签。下拉框列表有5个选项。它们是Linux发行版的名称。标签控件显示下拉列表选中的选项。


cb = Gtk::ComboBox.new

创建下拉框。


cb.append_text ‘Ubuntu’
cb.append_text ‘Mandriva’
cb.append_text ‘Redhat’
cb.append_text ‘Gento’
cb.append_text ‘Mint’

填充数据。


def on_changed sender, event, label
label.set_label sender.active_text
end

on_changed方法里,我们获取选中的文本并设置到标签中。


image5

图片:下拉框


在这章的Ruby GTK教程中我们显示了一些基本的控件。




原文地址: http://zetcode.com/gui/rubygtk/widgets/

翻译:龙昌 admin@longchangjin.cn