Linux 下使用 Ruby 进行 GTK 桌面开发 |
级别: 初级 杨 卓 ([email protected]), 软件工程师, IBM 2008 年 10 月 09 日 Ruby 是一门灵活的动态编程语言。GTK2 是开源的跨平台图像处理库。通过Ruby-GTK2 进行快速的 Linux 桌面图形应用开发。 介绍 Ruby-GTK2 是 GTK+ 的 ruby 绑定。Ruby 与 GTK2 的结合,带来了新的 GUI 开发方式。 GTK(GIMP Toolkit) 是一套跨多种平台的图形工具包,按 LGPL 许可协议发布的。虽然最初是为 GIMP 写的,但目前已发展为一个功能强大、设计灵活的一个通用图形库。特别是被 GNOME 选中使得 GTK+ 广为流传,成为 Linux 下开发桌面图形界面的应用程序的主流开发工具之一,目前 GTK+ 已经有了成功的 windows 版本。 Ruby 是一门动态脚本语言。有丰富的开发库。Rubyforge 网站(http://rubyforge.org/)是全球最大的 Ruby 开发库站点。 通过 Ruby 与 GTK 的有机结合,可以更高效、迅速地开发桌面图形化应用程序。 安装与测试 在开发 gtk2-ruby 之前,需要安装 ruby 和 gtk2 运行时。 基于 Debian 的 Linux 系统,输入
Apt 会自动安装 ruby 及 gtk2 运行时。 Windows 系统,首先登录 ruby 官方网站 下载最新稳定版本1.8.6 安装程序。然后登录ruby-gnome2 官方网站下载 gtk2-ruby 运行库。分别安装后即可。 成功配置系统之后,可以在命令行里(Windows 下的 cmd ,Linux 下的 shell)尝试运行下面程序:
如果成功看到窗口跳出,说明开发环境已搭建成功。 图 1. 弹出窗口 基本概念 Ruby-GTK2 信号系统 GTK 是基于事件(Event)模型驱动的。事件发生时,会产生信号。在响应不同的信号时,可以注册对信号的相应处理方法。例如:
对信号处理,都是通过基类 GLib::Instantiatable#signal_connect 函数来实现的。以信号名字的方式注册闭包代码到控件当中。
输出结果是: clicked 1 clicked 2 由运行结果可以看出,同一个控件对同一个信号可以进行多次注册,其执行顺序与注册顺序相同。 在 Ruby-GTK2 中如下清单事件会产生相应的信号,开发人员对其进行捕捉以进行相应处理:
绘图上下文 GTK 的绘图操作使用 Gdk::GC 参数。通过绘图上下文的使用(如设定背景色、长宽等),减少了重复的绘图属性设定和通讯消耗,进而提高了绘图效率。
如代码所示,gc 对象可以从 drawable 获取相关信息,并缓存到 GC 缓冲池当中,以便以后有其他对象引用。 Ruby-GTK2 主要控件 GTK 封装好了很多控件,便于开发人员进行调用。下面分类介绍主要控件的功能。
Gtk::Window 窗口控件。用于创建新窗口,包含其他控件。 Gtk::Dialog 对话框控件。用于与用户做简单信息交互,如显示信息、提出问题等。 Gtk::AboutDialog 关于控件。用于便利地创建提示性信息,如关于信息、版权信息等。 Gtk::Assistant 辅助控件。用于创建多步信息交互,如向导方式的窗体等。
Gtk::Label 标签控件。用于显示文字信息,如嵌于按钮控件( Gtk::Button )等。 Gtk::Image 图像控件。用于显示图像信息,如显示产品 Logo 图像等。 Gtk::ProgressBar 进度栏控件。用于显示任务执行进度信息,如任务执行百分比信息等。 Gtk::StatusBar 状态栏控件。用于显示应用程序的状态信息,一般位于窗体底部。
Gtk::Button 按钮控件。用于提供用户按下操作,如确认按钮等。 Gtk::CheckButton 勾选控件。用于提供用户勾选操作。 Gtk::RadioButton 单选控件。用于单选一组选项中的一个。
Gtk::Entry 录入控件。用于单行录入,如输入姓名等。 Gtk::SpinButton 微调按钮控件。用于微调数值,如调整录入百分比数值等。 Gtk::HScale 水平拖拽控件。用于通过水平拖拽改变数值。 Gtk::VScale 垂直拖拽控件。用于通过垂直拖拽改变数值。
Gtk::TextBuffer 文本缓冲区控件。其他多行编辑控件显示的内容。 Gtk::TextView 文本显示控件。用于显示文本缓冲区控件的内容。 Gtk::TextTag 文本标签控件。用于显示文本标签。 Gtk::TextTagTable 文本标签表控件。用于包含一组文本标签控件。
Gtk::TreeView 树、列表显示控件。用于展现树、列表结构。 Gtk::TreeViewColumn 显示列控件。用于显示 Gtk::TreeView 下一列。 Gtk::CellView 单排显示控件。用于显示Cell显示 Gtk::TreeView 。 Gtk::IconView 图标显示控件。用于在网格结构下显示 Gtk::TreeView 。
Gtk::MenuItem 菜单项控件。用于显示单个菜单项。 Gtk::Menu 菜单控件。用于提供下拉功能的菜单,如开始菜单等。 Gtk::ComboBox 组合框空间。用于提供一组选项功能,如下拉选择属性等。 Gtk::ToolItem 工具栏控件。用于创建按钮等其他控件,如菜单工具栏等。
Gtk::HBox 水平容器控件。用于水平装载一行显示控件。 Gtk::VBox 垂直容器控件。用于垂直装载一行显示控件。 Gtk::Notebook 多页显示容器控件。用于多页装载显示控件。 Gtk::Expander 可隐藏子控件的容器控件。用于显示、隐藏子控件的容器控件。 更加详尽的 Ruby-GTK2 控件信息及 API 描述,请参见参考资料。 实战 通过基本概念的学习和 Ruby-GTK2 主要控件的了解,下面编写一个聊天客户端桌面 GTK 应用程序。界面元素包括:菜单、快捷工具栏、聊天对话面板。实例代码如下:
运行结果: 图 2. 运行结果 可以对界面控件的事件信号做进一步的响应控制,如选中 About 菜单时弹出“关于”信息。实例代码如下:
运行结果如下: 图 3. 运行结果 聊天客户端打开后,后台启动一个 Socket 服务器,接受其他聊天客户端的连接,接收到的消息信息显示在对话框内。实现代码如下:
运行结果如下: 图 4. 运行结果 总结 本文介绍了 Ruby-GTK2 的基本概念,并展现了如何运用 Ruby 进行 GTK2 开发一个聊天客户端。希望通过本文的阅读,您可以使用 Ruby 和 GTK2 开发需要的桌面程序。 参考资料
下载
关于作者
|