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 => 字符串

指定文本的两种状态之一:normaldisabled。如果文本被禁用,则不能插入或删除字符,即使输入焦点在控件中,也不会显示插入光标。

6

tabs => 字符串

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

7

width => 整数

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

8

wrap => 字符串

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

操作文本

以下有用方法可用于操作文本的内容:

  • 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

这将产生以下结果:

Ruby/Tk Text
ruby_tk_guide.htm
广告