Ruby/TK - Text 文本小部件
说明
Text 小部件为用户提供了一个区域,以便他们可以输入多行文本。 文本小部件是经典 Tk 小部件的一部分,而不是主题 Tk 小部件。
文本小部件支持三种不同类型的文本注释 −
Tags − 允许文本的不同部分以不同的字体和颜色显示。 此外,Tcl 命令可以与标签相关联,以便在特定文本范围内发生特定动作(如击键和鼠标按钮按下)时调用脚本。
Marks − 第二种形式的注释由标记组成,标记是文本中的浮动标记。 标记用于在编辑文本时跟踪文本中的各种有趣位置。
Embedded windows − 第三种注释形式允许将任意窗口嵌入到文本小部件中。
标签可以显示文本字符串、位图或图像。 如果显示文本,则它必须全部采用单一字体,但它可以在屏幕上占据多行(如果它包含换行符或由于 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 => Integer 以字符为单位指定所需的窗口高度。 必须至少是一个。 |
2 | spacing1 => Integer 使用任何标准形式的屏幕距离请求小部件中每个文本行上方的额外空间。 如果换行,此选项仅适用于显示的第一行。 此选项可能会被标签中的 spacing1 选项覆盖。 |
3 | spacing2 => Integer 对于换行的行(以便它们在显示器上覆盖多行),此选项指定在表示单行文本的显示行之间提供额外的空间。 该值可以具有屏幕距离的任何标准形式。 此选项可能会被标签中的 spacing 选项覆盖。 |
4 | spacing3 => Integer 使用任何标准形式的屏幕距离请求小部件中每个文本行下方的额外空间。 如果换行,此选项仅适用于显示屏上的最后一行。 此选项可能会被标签中的 spacing3 选项覆盖。 |
5 | state => String 指定文本的两种状态之一:normal 或 disabled。 如果文本被禁用,则字符可能不会被插入或删除,并且不会显示插入光标,即使输入焦点在小部件中。 |
6 | tabs => String 为窗口指定一组制表位。 该选项的值由一个屏幕距离列表组成,该列表给出了制表位的位置。 每个位置可以选择在下一个列表元素中跟随关键字 left、right、center 或 numeric 之一 b>,它指定如何相对于制表位对齐文本。 左 是默认值。 |
7 | width => Integer 以字符为单位指定所需的窗口宽度。 如果字体没有统一的宽度,则字符"0"的宽度用于从字符单位转换为屏幕单位。 |
8 | wrap => String 指定如何处理文本中太长而无法在文本窗口的单行中显示的行。 该值必须是 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 将重新定位插入光标,而不会影响选择。
左右键将插入光标向左或向右移动一个字符; 他们还会清除文本中的任何选择。
Up 和 Down 键将插入光标向上或向下移动一行并清除文本中的任何选择。 如果在按下 Shift 键的情况下键入 Up 或 Right,则插入光标会移动,并且选择会扩展以包含新字符。
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
这将产生以下结果 −