Ruby/TK - 菜单按钮小部件


描述

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

在正常使用中,在菜单按钮上按鼠标按钮 1 会导致关联的菜单发布在菜单按钮的正下方。如果在释放鼠标按钮之前将鼠标移到菜单上,则释放按钮会导致调用底层菜单项。释放按钮后,菜单将取消发布。

菜单按钮通常被组织成允许扫描的称为菜单栏的组:如果在一个菜单按钮上按下鼠标按钮,并将鼠标移动到同一菜单栏中的另一个菜单按钮上而不释放鼠标按钮,则第一个菜单按钮的菜单将被取消发布并发布新菜单按钮的菜单。

句法

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

TkMenubutton.new(root) {
   .....Standard Options....
   .....Widget Specific Options....
}

标准选项

  • 活动背景
  • 光标
  • 突出显示厚度
  • 聚焦
  • 活跃前景
  • 禁用前景
  • 图像
  • 文本
  • 字体
  • 证明合法
  • 文本变量
  • 背景
  • 前景
  • 帕德克斯
  • 强调
  • 位图
  • 突出显示背景
  • 稻田
  • 包裹长度
  • 边框宽度
  • 突出显示颜色
  • 宽慰

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

小部件特定选项

先生。 选项和说明
1

复合 => 字符串

指定按钮是否应同时显示图像和文本,如果是,则图像相对于文本的放置位置。此选项的有效值为bottomcenterleftnonerighttop。默认值为none,这意味着按钮将显示图像或文本,具体取决于图像位图选项的值。

2

方向 =>字符串

指定弹出菜单的位置。上面尝试弹出菜单按钮上方的菜单。下面尝试弹出菜单按钮下方的菜单。Left尝试将菜单弹出到菜单按钮的左侧。right尝试将菜单弹出到菜单按钮的右侧。刷新直接在菜单按钮上弹出菜单。

3

高度 => 整数

指定菜单按钮所需的高度。

4

指示符 => 布尔值

该值必须是正确的布尔值。如果为 true,则菜单按钮的右侧将显示一个小指示矩形,并且默认菜单绑定会将其视为选项菜单按钮。如果为 false,则不会显示任何指示符。

5

菜单 =>字符串

指定与此菜单按钮关联的菜单的路径名。菜单必须是菜单按钮的子级。

6

状态 => 字符串

指定菜单按钮的三种状态之一:正常活动禁用在正常状态下,菜单按钮使用前景背景选项显示。

7

宽度 => 整数

指定菜单按钮所需的宽度。

事件绑定

Ruby/Tk 自动为菜单按钮创建类绑定,赋予它们以下默认行为 -

  • 每当鼠标经过菜单按钮时,菜单按钮就会激活,而每当鼠标离开它时,菜单按钮就会停用。

  • 在菜单按钮上按鼠标按钮 1 会发布菜单按钮:其浮雕会变为凸起,并且其关联的菜单会发布在菜单按钮下方。如果在按钮仍按下的情况下将鼠标向下拖动到菜单中,然后在菜单中的某个条目上释放鼠标按钮,则取消发布菜单按钮并调用菜单条目。

  • 如果在菜单按钮上按下按钮 1,然后在该菜单按钮上松开按钮 1,则菜单按钮将保持发布状态:您仍然可以将鼠标移到菜单上并单击条目上的按钮 1 来调用它。一旦调用了菜单项,菜单按钮就会自行取消发布。

  • 如果在菜单按钮上按下按钮 1,然后将其拖动到其他菜单按钮上,则原始菜单按钮将取消发布自身并发布新的菜单按钮。

  • 如果在菜单按钮上按下按钮 1 并在任何菜单按钮或菜单外释放,则菜单按钮将取消发布而不调用任何菜单条目。

  • 当发布菜单按钮时,其关联的菜单将声明输入焦点以允许键盘遍历菜单及其子菜单。

  • 如果为菜单按钮指定了下划线选项,则可以使用键盘遍历来发布菜单按钮:Alt+x,其中 x 是下划线字符(或其小写或大写等效字符),可以在任何窗口中键入在菜单按钮的顶层下发布菜单按钮。

  • 可以在任何窗口中键入 F10 键,以将第一个菜单按钮发布到其未禁用的顶级窗口下。

  • 如果菜单按钮具有输入焦点,则空格键和回车键会发布菜单按钮。

如果菜单按钮的状态为禁用,则不会发生上述任何操作:菜单按钮完全无响应。

例子

require "tk"

mbar = TkFrame.new {
   relief 'raised'
   borderwidth 2
}
mbar.pack('fill' => 'x')

TkMenubutton.new(mbar) {|mb|
   text "File"
   underline 0
   menu TkMenu.new(mb) {
      add 'command', 'label' => 'New...', 'underline' => 0,
         'command' => proc {print "opening new file\n"}
      add 'command', 'label' => 'Quit',
         'underline' => 0, 'command' => proc{exit}
   }
   pack('side' => 'left', 'padx' => '1m')
}

TkMenubutton.new(mbar) {|mb|
   text "Help"
   underline 0
   menu TkMenu.new(mb) {
      add 'command', 'label' => 'About', 'underline' => 0,
         'command' => proc {print "This is menu example.\n"}
   }
   pack('side' => 'left', 'padx' => '1m')
}

Tk.mainloop

这将产生以下结果 -

Ruby/Tk 菜单按钮
ruby_tk_guide.htm