Ruby/TK - 菜单按钮部件



描述

一个menubutton(菜单按钮)是一个部件,它显示一个文本字符串、位图或图像,并与一个菜单部件相关联。如果显示文本,则所有文本都必须使用单一字体,但它可以占据屏幕上的多行(如果包含换行符或由于wraplength选项导致换行),并且其中一个字符可以使用underline选项可选地带下划线。

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

菜单按钮通常组织成称为菜单栏的组以允许扫描:如果鼠标按钮按下某个菜单按钮,并且鼠标在同一菜单栏中的另一个菜单按钮上移动而没有释放鼠标按钮,则第一个菜单按钮的菜单将取消显示,而新菜单按钮的菜单将改为显示。

语法

以下是如何创建此部件的简单语法:

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

标准选项

  • activebackground
  • cursor
  • highlightthickness
  • takefocus
  • activeforeground
  • disabledforeground
  • image
  • text
  • anchor
  • font
  • justify
  • textvariable
  • background
  • foreground
  • padx
  • underline
  • bitmap
  • highlightbackground
  • pady
  • wraplength
  • borderwidth
  • highlightcolor
  • relief

这些选项已在上一章中进行了描述。

部件特定选项

序号 选项和描述
1

compound => 字符串

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

2

direction => 字符串

指定菜单将在哪里弹出。above尝试将菜单弹出到菜单按钮上方。below尝试将菜单弹出到菜单按钮下方。Left尝试将菜单弹出到菜单按钮左侧。right尝试将菜单弹出到菜单按钮右侧。flush直接在菜单按钮上弹出菜单。

3

height => 整数

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

4

indicatoron => 布尔值

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

5

menu => 字符串

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

6

state => 字符串

指定菜单按钮的三种状态之一:normalactivedisabled。在正常状态下,菜单按钮使用foregroundbackground选项显示。

7

width => 整数

指定菜单按钮所需宽度。

事件绑定

Ruby/Tk 自动为菜单按钮创建类绑定,从而为其提供以下默认行为:

  • 只要鼠标经过菜单按钮,它就会激活;只要鼠标离开,它就会停用。

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

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

  • 如果按钮 1 按下菜单按钮,然后拖动到其他某个菜单按钮上,则原始菜单按钮将取消发布,而新菜单按钮将发布。

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

  • 发布菜单按钮时,其关联的菜单会获取输入焦点以允许键盘遍历菜单及其子菜单。

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

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

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

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

示例

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 Menubutton
ruby_tk_guide.htm
广告