Ruby GTK 编程

  • 格式:doc
  • 大小:195.00 KB
  • 文档页数:16

Ruby GTK 简介在Ruby GTK编程指南的本章,我们将介绍GTK库并使用Ruby程序设计语言创建第一个程序。

关于GTK是一种用来创建用户图形界面(GUI)的主要工具包。

而Ruby是一种流行的脚本语言。

一个简单的例子在第一个例子中,我们创建一个简单的窗体,显示在屏幕的中间位置。

#!/usr/bin/rubyrequire 'gtk2'class RubyApp < Gtk::Windowdef initializesuperset_title "Center"signal_connect "destroy" doGtk.main_quitendset_default_size 250, 200set_window_position Gtk::Window::POS_CENTERshowendendGtk.initwindow = RubyApp.newGtk.main这个例子在屏幕的中间位置显示了一个250x200像素的窗体。

require 'gtk2'关键字require用来导入在程序中使用的必需类型。

class RubyApp < Gtk::Window这个例子继承了Window构件。

Window是一种顶层容器构件。

set_title "Center"给窗体设置标题。

signal_connect "destroy" doGtk.main_quitend当我们点击标题栏上的关闭按钮或按下快捷键Alt+F4时,触发destroy事件,并调用main_quit方法永久地关闭程序。

set_default_size 250, 200设置程序窗体大小。

set_window_position Gtk::Window::POS_CENTER这行代码用来将窗体放置在屏幕的中间位置。

Show当万事俱备了,在屏幕上显示窗体。

Gtk.initwindow = RubyApp.newGtk.main上述三行代码用来创建应用程序。

创建工具提示第二个例子将显示工具提示。

工具提示是一个小矩形窗体,用来显示关于一个对象的简短信息。

它通常是一个GUI组件,是应用程序帮助系统的一部分。

#!/usr/bin/rubyrequire 'gtk2'class RubyApp < Gtk::Windowdef initializesuperset_title "Tooltips"signal_connect "destroy" doGtk.main_quitendfixed = Gtk::Fixed.newadd fixedbutton = Gtk::Button.new "Button"button.set_size_request 80, 35button.set_tooltip_text "Button widget"fixed.put button, 50, 50set_tooltip_text "Window widget"set_default_size 250, 200set_window_position Gtk::Window::POS_CENTERshow_allendendGtk.initwindow = RubyApp.newGtk.main这个例子创建了一个窗体。

如果我们将鼠标指针浮停在窗体的区域上,将弹出一个工具提示。

button.set_tooltip_text "Button widget"使用set_tooltip_text方法设置工具提示内容。

退出按钮在本章的最后一个例子中,我们将创建一个退出按钮。

当按下这个按钮时,应用程序终止。

#!/usr/bin/rubyrequire 'gtk2'class RubyApp < Gtk::Windowdef initializesuperset_title "Quit button"signal_connect "destroy" doGtk.main_quitendinit_uishow_allenddef init_uifixed = Gtk::Fixed.newadd fixedbutton = Gtk::Button.new "Quit"button.set_size_request 80, 35button.signal_connect "clicked" doGtk.main_quitendfixed.put button, 50, 50set_default_size 250, 200set_window_position Gtk::Window::POS_CENTERendendGtk.initwindow = RubyApp.newGtk.main我们使用按钮构件,这是一种常见的构件。

按钮构件上可以显示文本标签、图像(或两者均可)。

init_ui我们委托init_ui方法创建用户图形界面。

show_all显示构件,有两种选择:或调用show显示所有构件,或调用show_all显示容器构件以及它的子构件。

button = Gtk::Button.new "Quit"创建一个按钮button.set_size_request 80, 35设置按钮的大小。

button.signal_connect "clicked" doGtk.main_quitend我们将main_quit方法和按钮的clicked事件连接起来。

fixed.put button, 50, 50我们将退出按钮放置在固定容器上x=50,y=50的位置上。

本章是借助Ruby语言来介绍GTK库的。

布局Fixed Container故名之意就是固定容器,它容许把控件放到一个固定容器中,并能随意到移动到某个位置[相对于窗口的左上方]。

虽然它能随意移动,但有很多弊端,比如容器的大小它会随字体的大小的改变而改变,从而可能会出现控件覆盖控件的现象;又如在多语言中,我们都知道阿拉伯语到单词大部分都比E文单词都要长,如果从E语切换到阿拉伯语或其它语言时,固定容器的在水平方向将会发生伸缩等现象明显是用户所不能接受的。

所以不推荐使用fixed container。

下面是一个对Fixed Container的简单实例:require 'gtk2'class RubyApp < Gtk::Windowdef initializesuperGtk.main_quitendfixed = Gtk::Fixed.newadd fixedbutton = Gtk::Button.new "Button"fixed.put button, 50, 50set_default_size 250, 200set_window_position Gtk::Window::POS_CENTERshow_allendendGtk.initwindow = RubyApp.newGtk.mainExapnder有扩展之意,expander容器只允许有一个子控件,通过点击expander 容器可以伸展或隐藏其子控件。

以下是一个对 Expander的简单实例:require 'gtk2'class RubyApp < Gtk::Windowdef initializesuperGtk.main_quitende = Gtk::Expander.new("_More Options", true)e.signal_connect("notify::expanded"){if e.expanded?puts "Show or create widgets"elseputs "Hide or destroy widgets"end}e.add Gtk::Button.new "Button1"e.expanded=trueadd eset_default_size 250, 200set_window_position Gtk::Window::POS_CENTERshow_allendendGtk.initwindow = RubyApp.newGtk.main在本章中,我们将显示如何在窗体或对话框上放置构建。

当设计应用程序用户界面时,我们决定使用何类构建以及如何在应用程序上组织这些构建。

为组织这些构建,我们需要使用一类称为布局器的不可视构建。

在本章中我们将提到Alignment构件、Fixed构建件、Vbox构件、Vbox构件何Table构建。

固定构建固定容器构建将其子构件固定的大小放置在固定的位置上,这种容器构建不能自动处理布局管理。

在大多数应用程序中,我们一般不使用这种容器构件。

在某些特殊的区域,才使用这种容器构件。

例如,一些使用图表的游戏和专业的应用程序、大小相当并可以移动的构件(如电子制表软件中的图表)以及小巧而有教育性的例子。

class RubyApp<Gtk::Windowdef initializesuperset_title “Fixed”signal_connect “destroy” doGtk.main_quitEndinit_uiset_default_size 300,280set_window_position Gtk::Window::POS_CENTERshow_allenddef init_uimodify_bg Gtk::STATE_NORMAL,Gdk::Color.new(6400,6400,6440)beginbardejov=Gdk::Pixbuf.new “bardejov.jpg”rotunda=Gdk::Pixbuf.new “rotunda.jpg”mincol=Gdk::Pixbuf.new “mincol.jpg”rescue IOError=>eputs eputs “cannot load images”exitendimage1=Gtk::Image.new bardejovimage2=Gtk::Image.new rotundaimage3=Gtk::Image.new mincolfixed=Gtk::Fixed.newfixed.put image1,20,20fixed.put image2,40,160fixed.put image3,170,50add fixedendendGtk.initWindow=RubyApp.newGtk.main在这个例子中,我们在窗体上显示了三个小图像文件。