控件
在这部分的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
如果按钮选中则显示标题。
图片:复选按钮
标签(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
创建标签并添加到窗口内。
图片:标签控件
输入框(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控件获取文本并设置到标签中。
图片: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
将控件添加到容器中。
图片: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方法里,我们获取选中的文本并设置到标签中。
图片:下拉框
在这章的Ruby GTK教程中我们显示了一些基本的控件。
原文地址: http://zetcode.com/gui/rubygtk/widgets/
翻译:龙昌 admin@longchangjin.cn