PyGTK MenuBar,Menu 和MenuItem

PyGTK MenuBar,Menu 和MenuItem

在顶层gtk.Window的标题栏下面有一个水平条,用来显示一系列的菜单。它是PyGTK API中gtk.MenuBar类的一个对象。

gtk.Menu类的一个对象被添加到菜单栏中。它也被用来创建上下文菜单和弹出式菜单。每个菜单可以包含一个或多个gtk.MenuItem小部件。其中一些可以是一个子菜单.并有层叠的MenuItem按钮。

gtk.MenuBar是由gtk.MenuShell类子类化的。它有一个简单的默认构造函数–

gtk.MenuBar()

为了给MenuBar添加一个菜单,需要使用MenuBar类的append()方法。

为了构建一个菜单,创建一个带有希望出现在菜单栏中的标签的MenuItem widget,并将其设置为子菜单。

例如,下面的代码用来设置一个文件菜单–

menu1 = gtk.Menu()
file = gtk.MenuItem("_File")
file.set_submenu(menu1)

现在,一个或多个MenuItem类的部件可以被添加到菜单中。

item1 = gtk.MenuItem("New")
item2 = gtk.MenuItem("Open")

这些MenuItems被添加到Menu widget,而菜单对象又被添加到菜单栏。

menu1.append(item1)
menu1.append(item2)
mb.append(menu1)

PyGTK工具箱提供了许多类型的MenuItem部件。ImageMenuItem是一个有图像关联的菜单项。你可以通过使用Stock ID参数来使用任何图片,或者通过set_image()方法指定任何其他图片。

例如,具有图像的 “新 “菜单项是以如下方式创建的

new = gtk.ImageMenuItem(gtk.STOCK_NEW)
menu1.append(new)

同样,也可以使用以下代码添加CheckMenuItem —

chk = gtk.CheckMenuItem("Checkable")
menu1.append(chk)

也可以用这段代码添加一组单选项目–

radio1 = gtk.RadioMenuItem(None,"Radio1")
radio2 = gtk.RadioMenuItem(radio1, "Radio2")
menu1.append(radio1)
menu1.append(radio2)

有时,你可能想在菜单项之间添加一个分隔线。为此目的, SeparatorMenuItem 也是可用的。

sep = gtk.SeparatorMenuItem()
menu1.append(sep)

你也可以为菜单项指定键盘快捷键。PyGTK有加速器。首先创建一个加速器组,并将其附加到顶层窗口。

acgroup = gtk.AccelGroup()
self.add_accel_group(acgroup)

要分配快捷方式,请使用 add_accelerator( )函数,其原型如下

Item1.add_accelerator(signal, group, key, modifier, flags)

以下是一些预定义的修改器-

  • SHIFT_MASK
  • LOCK_MASK
  • CONTROL_MASK
  • BUTTON1_MASK
  • BUTTON1_MASK

为了给新菜单项目指定Ctrl+N快捷键,请使用以下语法

new = gtk.ImageMenuItem(gtk.STOCK_NEW,acgroup)
new.add_accelerator("activate", acgroup, ord('N'), 
   gtk.gdk.CONTROL_MASK, gtk.ACCEL_VISIBLE)

例子

下面的例子展示了上面讨论的特征 −

import gtk

class PyApp(gtk.Window):
   def __init__(self):

      super(PyApp, self).__init__()
      self.set_title("Menu Demo")
      self.set_default_size(250, 200)
      self.set_position(gtk.WIN_POS_CENTER)

      mb = gtk.MenuBar()

      menu1 = gtk.Menu()
      file = gtk.MenuItem("_File")
      file.set_submenu(menu1)
      acgroup = gtk.AccelGroup()
      self.add_accel_group(acgroup)
      new = gtk.ImageMenuItem(gtk.STOCK_NEW,acgroup)
      new.add_accelerator("activate", acgroup, ord('N'), 
         gtk.gdk.CONTROL_MASK, gtk.ACCEL_VISIBLE)

      menu1.append(new)
      open = gtk.ImageMenuItem(gtk.STOCK_OPEN)

      menu1.append(open)
      chk = gtk.CheckMenuItem("Checkable")

      menu1.append(chk)
      radio1 = gtk.RadioMenuItem(None,"Radio1")
      radio2 = gtk.RadioMenuItem(radio1, "Radio2")

      menu1.append(radio1)
      menu1.append(radio2)
      sep = gtk.SeparatorMenuItem()

      menu1.append(sep)
      exit = gtk.ImageMenuItem(gtk.STOCK_QUIT)

      menu1.append(exit)
      menu2 = gtk.Menu()
      edit = gtk.MenuItem("_Edit")
      edit.set_submenu(menu2)
      copy = gtk.ImageMenuItem(gtk.STOCK_COPY)

      menu2.append(copy)
      cut = gtk.ImageMenuItem(gtk.STOCK_CUT)

      menu2.append(cut)
      paste = gtk.ImageMenuItem(gtk.STOCK_PASTE)

      menu2.append(paste)
      mb.append(file)
      mb.append(edit)
      vbox = gtk.VBox(False, 2)
      vbox.pack_start(mb, False, False, 0)

      self.add(vbox)
      self.connect("destroy", gtk.main_quit)
      self.show_all()
if __name__ == '__main__':
   PyApp()
   gtk.main()

上述代码将产生以下输出 —

PyGTK - MenuBar,Menu and MenuItem

Python教程

Java教程

Web教程

数据库教程

图形图像教程

大数据教程

开发工具教程

计算机教程