Ruby/TK - 文本小部件


描述

文本部件为用户提供了一个区域,以便他们可以输入多行文本。文本小部件是经典 Tk 小部件的一部分,而不是主题 Tk 小部件。

文本小部件支持三种不同类型的文本注释 -

  • 标签- 允许文本的不同部分以不同的字体和颜色显示。此外,Tcl 命令可以与标签关联,以便在文本的特定范围内发生特定操作(例如击键和按下鼠标按钮)时调用脚本。

  • 标记- 第二种形式的注释由标记组成,它们是文本中的浮动标记。标记用于在编辑文本时跟踪文本中各种有趣的位置。

  • 嵌入窗口- 第三种注释形式允许将任意窗口嵌入到文本小部件中。

标签可以显示文本字符串、位图或图像。如果显示文本,则它必须全部采用单一字体,但它可以在屏幕上占据多行(如果它包含换行符或由于wraplength选项而发生换行,并且可以选择使用下划线为其中一个字符加下划线选项。

句法

这是创建此小部件的简单语法 -

TkText.new(root) {
   .....Standard Options....
   .....Widget-specific Options....
}

标准选项

  • 背景
  • 边框宽度
  • 光标
  • 出口选择
  • 字体
  • 前景
  • 突出显示背景
  • 突出显示颜色
  • 突出显示厚度
  • 插入背景
  • 插入边框宽度
  • 插入关闭时间
  • 插入时间
  • 插入宽度
  • 帕德克斯
  • 稻田
  • 宽慰
  • 选择背景
  • 选择边框宽度
  • 选择前景
  • 设置网格
  • 聚焦
  • xscroll命令
  • yscroll命令

这些选项已在前面的章节中描述过。

小部件特定选项

先生。 选项和说明
1

高度 => 整数

以字符为单位指定窗口所需的高度。必须至少有一个。

2

间距1 => 整数

使用任何屏幕距离的标准形式请求小部件中每个文本行上方的额外空间。如果换行,此选项仅适用于显示屏上的第一行。该选项可以被标签中的space1选项覆盖。

3

间距2 => 整数

对于换行(以便它们覆盖显示屏上的多行),此选项指定在表示单行文本的显示行之间提供额外的空间。该值可以具有任何屏幕距离的标准形式。该选项可以被标签中的间距选项覆盖。

4

间距3 => 整数

使用任何屏幕距离的标准形式请求小部件中每个文本行下方的额外空间。如果换行,此选项仅适用于显示屏上的最后一行。该选项可以被标签中的space3选项覆盖。

5

状态 => 字符串

指定文本的两种状态之一:正常禁用。如果文本被禁用,则即使输入焦点位于小部件中,也可能无法插入或删除字符,并且不会显示插入光标。

6

选项卡 => 字符串

指定窗口的一组制表位。该选项的值由给出制表位位置的屏幕距离列表组成。每个位置可以选择在下一个列表元素中跟随关键字leftrightcenternumeric之一,它指定如何相对于制表位对齐文本。左侧为默认值。

7

宽度 => 整数

以字符为单位指定窗口所需的宽度。如果字体没有统一的宽度,则在从字符单位转换为屏幕单位时使用字符“0”的宽度。

8

换行 => 字符串

指定如何处理文本中太长而无法在文本窗口的单行中显示的行。该值必须是nonecharword

操纵测试

以下有用的方法可用于操纵文本的内容 -

  • delete(index1, ?index2?) - 从文本中删除一系列字符。如果同时指定了index1和index2,则删除从index1给定的字符开始到index2之前的所有字符。如果index2没有指定文本中比index1晚的位置,则不会删除任何字符。如果未指定index2 ,则删除index1处的单个字符。

  • get(index1, ?index2?) - 返回文本中的字符范围。返回值将是文本中从索引为index1的字符开始到索引为index2的字符之前结束的所有字符(不会返回index2处的字符)。如果省略index2,则返回index1处的单个字符。

  • index(index) - 返回与line.char形式的索引相对应的位置,其中line是行号,char是字符号。

  • insert(index, chars, ?tagList, chars, tagList, ...?) - 将所有chars参数插入到index处的字符之前。如果索引引用文本的末尾(最后一个换行符之后的字符),则新文本将插入到最后一个换行符之前。如果只有一个chars参数并且没有tagList,则新文本将接收插入点之前的字符和之后的字符上存在的任何标签;如果标签仅出现在这些字符之一上,则该标签不会应用于新文本。如果指定了tagList,则它由标签名称列表组成;新角色将接收此列表中的所有标签,而不会接收其他标签,无论插入点周围存在什么标签。如果存在多个chars - tagList参数对,它们会产生相同的效果,就像按顺序为每对发出单独的插入小部件命令一样。最后一个tagList参数可以省略。

  • xview(option, args) - 此命令用于查询和更改小部件窗口中文本的水平位置。

  • yview(?args?) - 此命令用于查询和更改小部件窗口中文本的垂直位置。

事件绑定

Ruby/Tk 自动为文本创建类绑定。这里列出了一些重要的绑定。

  • 单击鼠标按钮 1 将插入光标定位在鼠标光标下方的字符之前,将输入焦点设置到该小部件,并清除小部件中的所有选择。使用鼠标按钮 1 拖动可在插入光标和鼠标下的字符之间划出一个选区。

  • 双击鼠标按钮 1 选择鼠标下的单词并将插入光标定位在单词的开头。双击后拖动将划出由整个单词组成的选区。

  • 用鼠标按钮 1 单击三次可选择鼠标下方的行并将插入光标定位在该行的开头。三击后拖动将划出由整行组成的选区。

  • 按住 Control 键单击鼠标按钮 1 将重新定位插入光标,而不影响选择。

  • 向左键和向右键将插入光标向左或向右移动一个字符;他们还清除文本中的所有选择。

  • 向上和向下键将插入光标向上或向下移动一行并清除文本中的任何选择。如果在按下 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

这将产生以下结果 -

Ruby/Tk 文本
ruby_tk_guide.htm