- Ruby 基础
- Ruby - 首页
- Ruby - 概述
- Ruby - 环境设置
- Ruby - 语法
- Ruby - 类和对象
- Ruby - 变量
- Ruby - 运算符
- Ruby - 注释
- Ruby - IF...ELSE
- Ruby - 循环
- Ruby - 方法
- Ruby - 块
- Ruby - 模块
- Ruby - 字符串
- Ruby - 数组
- Ruby - 哈希表
- Ruby - 日期和时间
- Ruby - 范围
- Ruby - 迭代器
- Ruby - 文件I/O
- Ruby - 异常
Ruby/TK - 文本控件
描述
文本控件为用户提供了一个区域,以便他们可以输入多行文本。文本控件属于经典的Tk控件,而不是主题化的Tk控件。
文本控件支持三种不同类型的文本注释:
标签 - 允许以不同的字体和颜色显示文本的不同部分。此外,可以将Tcl命令与标签关联起来,以便在文本的特定范围内发生特定操作(例如按键和鼠标按钮按下)时调用脚本。
标记 - 第二种注释形式由标记组成,标记是文本中的浮动标记。标记用于跟踪编辑过程中文本中各种有趣的位置。
嵌入式窗口 - 第三种注释形式允许将任意窗口嵌入到文本控件中。
标签可以显示文本字符串、位图或图像。如果显示文本,则所有文本必须使用单一字体,但它可以在屏幕上占据多行(如果包含换行符或由于wraplength选项导致换行),并且可以使用underline选项可选地为其中一个字符添加下划线。
语法
这是一个创建此控件的简单语法:
TkText.new(root) { .....Standard Options.... .....Widget-specific Options.... }
标准选项
- background
- borderwidth
- cursor
- exportselection
- font
- foreground
- highlightbackground
- highlightcolor
- highlightthickness
- insertbackground
- insertborderwidth
- insertofftime
- insertontime
- insertwidth
- padx
- pady
- relief
- selectbackground
- selectborderwidth
- selectforeground
- setgrid
- takefocus
- xscrollcommand
- yscrollcommand
这些选项已在上一章中描述。
控件特定选项
序号 | 选项和描述 |
---|---|
1 | height => 整数 指定窗口的所需高度(以字符为单位)。必须至少为1。 |
2 | spacing1 => 整数 请求在窗口中每行文本上方添加额外空间,使用任何标准的屏幕距离形式。如果一行换行,则此选项仅适用于显示中的第一行。此选项可能会被标签中的spacing1选项覆盖。 |
3 | spacing2 => 整数 对于换行的行(以便它们覆盖显示中的多行),此选项指定在表示单行文本的显示行之间提供的额外空间。该值可以使用任何标准的屏幕距离形式。此选项可能会被标签中的spacing选项覆盖。 |
4 | spacing3 => 整数 请求在窗口中每行文本下方添加额外空间,使用任何标准的屏幕距离形式。如果一行换行,则此选项仅适用于显示中的最后一行。此选项可能会被标签中的spacing3选项覆盖。 |
5 | state => 字符串 指定文本的两种状态之一:normal 或 disabled。如果文本被禁用,则不能插入或删除字符,即使输入焦点在控件中,也不会显示插入光标。 |
6 | tabs => 字符串 指定窗口的一组制表位。选项的值由屏幕距离列表组成,这些距离给出制表位的位置。列表中的每个位置之后可以选择跟随关键字left、right、center或numeric之一,这些关键字指定如何相对于制表位对齐文本。Left为默认值。 |
7 | width => 整数 指定窗口的所需宽度(以字符为单位)。如果字体没有统一的宽度,则使用字符“0”的宽度来将字符单位转换为屏幕单位。 |
8 | wrap => 字符串 指定如何处理文本中过长而无法在文本窗口的单行中显示的行。该值必须是none或char或word。 |
操作文本
以下有用方法可用于操作文本的内容:
delete(index1, ?index2?) - 从文本中删除一系列字符。如果同时指定了index1和index2,则删除从index1给出的字符开始,到index2之前的字符结束的所有字符。如果index2指定的文本位置不晚于index1,则不删除任何字符。如果未指定index2,则删除index1处的单个字符。
get(index1, ?index2?) - 从文本中返回一系列字符。返回值将是文本中从索引为index1的字符开始,到索引为index2之前的字符结束的所有字符(不会返回index2处的字符)。如果省略了index2,则返回index1处的单个字符。
index(index) - 以line.char的形式返回对应于index的位置,其中line是行号,char是字符号。
insert(index, chars, ?tagList, chars, tagList, ...?) - 在index处的字符之前插入所有chars参数。如果index指向文本的末尾(最后一个换行符后的字符),则新文本将插入到最后一个换行符之前。如果只有一个chars参数且没有tagList,则新文本将接收插入点前后字符上都存在的任何标签;如果标签只存在于其中一个字符上,则不会将其应用于新文本。如果指定了tagList,则它由标签名称列表组成;新字符将接收此列表中的所有标签,而不管插入点周围存在的标签如何。如果存在多个chars-tagList参数对,则它们产生的效果与为每个对分别发出一个insert控件命令的效果相同,按顺序排列。最后一个tagList参数可以省略。
xview(option, args) - 此命令用于查询和更改控件窗口中文本的水平位置。
yview(?args?) - 此命令用于查询和更改控件窗口中文本的垂直位置。
事件绑定
Ruby/Tk自动为文本创建类绑定。以下是列出的一些重要绑定。
单击鼠标按钮1将插入光标定位在鼠标光标下方的字符之前,将输入焦点设置为该控件,并清除控件中的任何选择。使用鼠标按钮1拖动将在插入光标和鼠标下方的字符之间划出选择。
双击鼠标按钮1将选择鼠标下的单词,并将插入光标定位在单词的开头。双击后拖动将划出由整个单词组成的选择。
三击鼠标按钮1将选择鼠标下的行,并将插入光标定位在行的开头。三击后拖动将划出由整行组成的选择。
按住Control键的同时单击鼠标按钮1将重新定位插入光标,而不影响选择。
向左和向右键将插入光标向左或向右移动一个字符;它们还会清除文本中的任何选择。
向上和向下键将插入光标向上或向下移动一行,并清除文本中的任何选择。如果按住Shift键的同时按下向上键或向右键,则插入光标将移动,并且选择将扩展到包含新字符。
Control-x 删除文本控件中选择的内容。
Control-o 通过在插入光标前面插入换行符来打开新行,而不会移动插入光标。
Control-d 删除插入光标右侧的字符。
示例
require 'tk' root = TkRoot.new root.title = "Window" text = TkText.new(root) do width 30 height 20 borderwidth 1 font TkFont.new('times 12 bold') pack("side" => "right", "padx"=> "5", "pady"=> "5") end text.insert 'end', "Hello!\n\ntext widget example" Tk.mainloop
这将产生以下结果: