PyGTK - MenuBar, Menu dan MenuItem

Bilah horizontal tepat di bawah bilah judul dari gtk. Jendela tingkat atas disediakan untuk menampilkan rangkaian menu. Ini adalah objek kelas gtk.MenuBar di PyGTK API.

Objek dari kelas gtk.Menu ditambahkan ke bilah menu. Ini juga digunakan untuk membuat menu konteks dan menu popup. Setiap menu mungkin berisi satu atau lebih widget gtk.MenuItem. Beberapa di antaranya dapat menjadi submenu dan memiliki tombol MenuItem berjenjang.

The gtk.MenuBar merupakan subclass dari kelas gtk.MenuShell. Ini memiliki konstruktor default sederhana -

gtk.MenuBar()

Untuk menambahkan menu ke MenuBar, metode append () dari kelas MenuBar digunakan.

Untuk membuat menu, buat widget MenuItem dengan label yang diinginkan untuk muncul di bilah menu dan setel sebagai submenu.

Misalnya, kode berikut digunakan untuk menyiapkan menu File -

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

Sekarang, satu atau lebih widget dari kelas MenuItem dapat ditambahkan di menu.

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

MenuItems ini ditambahkan ke widget Menu dan objek menu pada gilirannya ditambahkan ke bilah menu.

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

Toolkit PyGTK menawarkan banyak jenis widget MenuItem. Sebuah ImageMenuItem adalah item menu dengan gambar yang terkait dengannya. Anda dapat menggunakan gambar stok apa pun dengan menggunakan parameter ID Saham atau menetapkan gambar lain dengan metode set_image ().

Misalnya, item menu 'Baru' yang memiliki gambar dibuat dengan cara berikut -

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

Demikian pula, Anda juga dapat menambahkan CheckMenuItem menggunakan kode berikut -

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

Sekelompok item radio juga dapat ditambahkan menggunakan kode ini -

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

Terkadang, Anda mungkin ingin menambahkan garis pemisah di antara item menu. Untuk tujuan itu, fileSeparatorMenuItem juga tersedia.

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

Anda juga dapat menetapkan pintasan keyboard ke item menu. PyGTK memiliki akselerator. Mulailah dengan membuat grup akselerator dan lampirkan ke jendela tingkat atas.

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

Untuk menetapkan pintasan, gunakan add_accelerator() berfungsi dengan prototipe berikut -

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

Berikut ini adalah beberapa pengubah standar -

  • SHIFT_MASK
  • LOCK_MASK
  • CONTROL_MASK
  • BUTTON1_MASK
  • BUTTON1_MASK

Untuk menetapkan pintasan Ctrl + N ke item Menu Baru, gunakan sintaks berikut -

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

Contoh

Contoh berikut menunjukkan fitur yang dibahas di atas -

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()

Kode di atas akan menghasilkan keluaran sebagai berikut -