PyGTK-메뉴 바, 메뉴 및 메뉴 항목

최상위 gtk.Window의 제목 표시 줄 바로 아래에있는 가로 막대는 일련의 메뉴를 표시하도록 예약되어 있습니다. PyGTK API에서 gtk.MenuBar 클래스의 객체입니다.

gtk.Menu 클래스의 객체가 메뉴 모음에 추가됩니다. 컨텍스트 메뉴 및 팝업 메뉴를 만드는데도 사용됩니다. 각 메뉴에는 하나 이상의 gtk.MenuItem 위젯이 포함될 수 있습니다. 그들 중 일부는 하위 메뉴가 될 수 있으며 계단식 MenuItem 버튼이 있습니다.

gtk.MenuBar는 gtk.MenuShell 클래스에서 서브 클래 싱됩니다. 간단한 기본 생성자가 있습니다.

gtk.MenuBar()

MenuBar에 메뉴를 추가하려면 MenuBar 클래스의 append () 메서드가 사용됩니다.

메뉴를 구성하기 위해서는 메뉴 바에 표시하고자하는 라벨이있는 MenuItem 위젯을 생성하여 하위 메뉴로 설정합니다.

예를 들어, 다음 코드는 파일 메뉴를 설정하는 데 사용됩니다-

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

이제 MenuItem 클래스의 위젯을 하나 이상 메뉴에 추가 할 수 있습니다.

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

이러한 메뉴 항목은 메뉴 위젯에 추가되고 메뉴 개체는 차례로 메뉴 모음에 추가됩니다.

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

위의 코드는 다음 출력을 생성합니다.