Ruby - Tk 指南
简介
Ruby 的标准图形用户界面 (GUI) 是 Tk。 Tk 最初是由 John Ousterhout 开发的 Tcl 脚本语言的 GUI。
Tk 的独特之处在于它是唯一的跨平台 GUI。 Tk 在 Windows、Mac 和 Linux 上运行,并在每个操作系统上提供本机外观。
基于 Tk 的应用程序的基本组件称为小部件。 组件有时也称为窗口,因为在 Tk 中,"窗口"和"小部件"经常互换使用。
Tk 应用程序遵循一个小部件层次结构,其中任意数量的小部件可以放置在另一个小部件中,并且这些小部件在另一个小部件中,无穷无尽。 Tk 程序中的主部件称为根部件,可以通过创建 TkRoot 类的新实例来创建。
大多数基于 Tk 的应用程序都遵循相同的循环:创建小部件,将它们放置在界面中,最后将与每个小部件关联的事件绑定到方法。
共有三个几何管理器; place、grid 和 pack 负责控制界面中每个小部件的大小和位置。
安装
Ruby Tk 绑定与 Ruby 一起分发,但 Tk 是一个单独的安装。 Windows 用户可以从 ActiveState's ActiveTcl 下载单击 Tk 安装。
Mac 和 Linux 用户可能不需要安装它,因为它很有可能已经与 OS 一起安装,但如果没有,您可以下载预构建的软件包或从 Tcl Developer Xchange 获取源代码。
简单的 Tk 应用程序
Ruby/Tk 程序的典型结构是创建主窗口或 root 窗口(TkRoot 的一个实例),向其中添加小部件以构建用户界面,然后启动主事件 通过调用 Tk.mainloop 循环。
Ruby/Tk 的传统 Hello, World! 示例如下所示 −
require 'tk' root = TkRoot.new { title "Hello, World!" } TkLabel.new(root) do text 'Hello, World!' pack { padx 15 ; pady 15; side 'left' } end Tk.mainloop
这里,在加载了 tk 扩展模块之后,我们使用 TkRoot.new 创建了一个根级框架。 然后我们制作一个 TkLabel 小部件作为根框架的子框架,为标签设置几个选项。 最后,我们打包根框架并进入主 GUI 事件循环。
如果您要运行此脚本,它将产生以下结果 −
Ruby/Tk 小部件类
有一个各种 Ruby/Tk 类的列表,可用于使用 Ruby/Tk 创建所需的 GUI。
TkFrame 创建和操作框架小部件。
TkButton 创建和操作按钮小部件。
TkLabel 创建和操作标签小部件。
TkEntry 创建和操作条目小部件。
TkCheckButton 创建和操作检查按钮小部件。
TkRadioButton 创建和操作单选按钮小部件。
TkListbox 创建和操作列表框小部件。
TkComboBox 创建和操作列表框小部件。
TkMenu 创建和操作菜单小部件。
TkMenubutton 创建和操作菜单按钮小部件。
Tk.messageBox 创建和操作消息对话框。
TkScrollbar 创建和操作滚动条小部件。
TkCanvas 创建和操作画布小部件。
TkScale 创建和操作比例小部件。
TkText 创建和操作文本小部件。
TkToplevel 创建和操作顶级小部件。
TkSpinbox 创建和操作 Spinbox 小部件。
TkProgressBar 创建和操作进度条小部件。
对话框创建和操作对话框小部件。
Tk::Tile::Notebook 用笔记本比喻在有限的空间内显示多个窗口。
Tk::Tile::Paned 显示多个子窗口,垂直或水平堆叠。
Tk::Tile::Separator 显示水平或垂直分隔条。
Ruby/Tk 字体、颜色和图像 了解 Ruby/Tk 字体、颜色和图像
标准配置选项
所有小部件都有许多不同的配置选项,这些选项通常控制它们的显示方式或行为方式。 当然,可用的选项取决于小部件类。
这里是所有标准配置选项的列表,它们可能适用于任何 Ruby/Tk 小部件。
Ruby/Tk 几何管理
几何管理处理根据要求定位不同的小部件。 Tk 中的几何管理依赖于主从小部件的概念。
主控是一个小部件,通常是顶级窗口或框架,其中将包含其他小部件,这些小部件称为从属。 您可以将几何管理器视为控制主小部件并决定将在其中显示的内容。
几何管理器将询问每个从属小部件的自然大小,或者理想情况下希望显示的大小。 然后,当它要求几何管理器管理该特定从属部件时,它会获取该信息并将其与程序提供的任何参数结合起来。
三个几何管理器place、grid 和pack 负责控制界面中每个小部件的大小和位置。
Ruby/Tk 事件处理
Ruby/Tk 支持事件循环,它从操作系统接收事件。 这些是按钮按下、击键、鼠标移动、窗口大小调整等.
Ruby/Tk 会为您管理这个事件循环。 它将找出事件适用于哪个小部件(用户是否单击了此按钮?如果按下某个键,则哪个文本框具有焦点?),并相应地调度它。 单个小部件知道如何响应事件,例如,当鼠标移到按钮上时,按钮可能会改变颜色,并在鼠标离开时恢复原状。
在更高的层次上,Ruby/Tk 会在您的程序中调用回调,以指示小部件发生了重要的事情。对于任何一种情况,您都可以提供代码块或 Ruby Proc 对象来指定应用程序如何响应 到事件或回调。
让我们看看如何使用 bind 方法将基本的窗口系统事件与处理它们的 Ruby 过程相关联。 最简单的绑定形式将指示事件名称的字符串和 Tk 用于处理事件的代码块作为其输入。
例如,要捕获某个小部件上第一个鼠标按钮的 ButtonRelease 事件,您可以编写 −
someWidget.bind('ButtonRelease-1') { ....code block to handle this event... }
事件名称可以包含其他修饰符和详细信息。 修饰符是一个字符串,如 Shift、Control 或 Alt,表示按下了其中一个修饰键。
因此,例如,捕获当用户按住 Ctrl 键并单击鼠标右键时生成的事件。
someWidget.bind('Control-ButtonPress-3', proc { puts "Ouch!" })
许多 Ruby/Tk 小部件可以在用户激活它们时触发 callbacks,并且您可以使用 command 回调来指定在发生这种情况时调用某个代码块或过程。 如前所述,您可以在创建小部件时指定命令回调过程 −
helpButton = TkButton.new(buttonFrame) { text "Help" command proc { showHelp } }
或者您可以稍后使用小部件的 command 方法分配它 −
helpButton.command proc { showHelp }
由于 command 方法接受过程或代码块,因此您还可以将前面的代码示例编写为 −
helpButton = TkButton.new(buttonFrame) { text "Help" command { showHelp } }
配置方法
configure 方法可用于设置和检索任何小部件配置值。 例如,要更改按钮的宽度,您可以随时调用 configure 方法,如下所示 −
require "tk" button = TkButton.new { text 'Hello World!' pack } button.configure('activebackground', 'blue') Tk.mainloop
要获取当前小部件的值,只需提供不带值的值,如下所示 −
color = button.configure('activebackground')
你也可以调用 configure 而不需要任何选项,这将为你提供所有选项及其值的列表。
cget 方法
为了简单地检索选项的值,configure 会返回比您通常想要的更多的信息。 cget 方法只返回当前值。
color = button.cget('activebackground')