Wxpython-menus

提供:Dev Guides
移動先:案内検索

メニュー項目、メニューおよびメニューバー

最上位ウィンドウのタイトルバーのすぐ下にある水平バーは、一連のメニューを表示するために予約されています。 wxPython APIの* wx.MenuBarクラス*のオブジェクトです。

wx.Menuクラスのオブジェクトがメニューバーに追加されます。 また、コンテキストメニューとポップアップメニューの作成にも使用されます。 各メニューには、1つ以上のwx.MenuItemオブジェクトまたはカスケードメニューオブジェクトが含まれる場合があります。

wx.MenuBarクラスには、デフォルトのコンストラクターに加えて、パラメーター化されたコンストラクターがあります。

wx.MenuBar()

wx.MenuBar(n, menus, titles, style)

パラメータ「n」はメニューの数を表します。 Menu は、メニューとタイトルの配列、および文字列の配列です。 スタイルパラメータがwx.MB_DOCKABLEに設定されている場合、メニューバーをドッキングできます。

以下は、wx.MenuBarクラスのメソッドのリストです-

S.N. Methods & Description
1

Append()

メニューオブジェクトをバーに追加します

2

Check()

メニューをオンまたはオフにします

3

Enable()

メニューを有効または無効にします

4

Remove()

バーからメニューを削除する

wx.Menuクラスオブジェクトは、1つ以上のメニュー項目のプルダウンリストであり、そのうちの1つはユーザーが選択できます。

次の表は、wx.Menuクラスの頻繁に必要なメソッドを示しています-

以下に、wx.Menuの最も一般的に使用されるメソッドを示します

S.N. Methods & Description
1

Append()

メニューにメニュー項目を追加します

2

AppendMenu()

サブメニューを追加します

3

AppendRadioItem()

選択可能なラジオ項目を追加します

4

AppendCheckItem()

チェック可能なメニュー項目を追加します

5

AppendSeparator()

区切り線を追加します

6

Insert()

指定された位置に新しいメニューを挿入します

7

InsertRadioItem()

指定された位置にラジオアイテムを挿入します

8

InsertCheckItem()

指定された位置に新しいチェック項目を挿入します

9

InsertSeparator()

区切り線を挿入します

10

Remove()

メニューからアイテムを削除します

11

GetMenuItems()

メニュー項目のリストを返します

*Menu Item* は、Append()関数を使用して直接追加するか、wx.MenuItemクラスのオブジェクトを使用して追加できます。
wx.Menu.Append(id, text, kind)

Item = Wx.MenuItem(parentmenu, id, text, kind)
wx.Menu.Append(Item)

メニュー項目を定義するには、追加するメニューを指定する必要があります。

wxPythonには、標準メニュー項目に割り当てられる多数の標準IDがあります。 一部のOSプラットフォームでは、標準アイコンにも関連付けられています。

wx.ID_SEPARATOR wx.ID_ANY wx.ID_OPEN wx.ID_CLOSE wx.ID_NEW wx.ID_SAVE wx.ID_SAVEAS wx.ID_EDIT wx.ID_CUT wx.ID_COPY wx.ID_PASTE

ただし、一意の整数をIDとして割り当てることができます。 テキストパラメータはそのキャプションです。 種類のパラメータは、次の列挙子のいずれかを取ります-

S.N. Parameters & Description
1

wx.ITEM_NORMAL

通常のメニュー項目

2

wx.ITEM_CHECK

メニュー項目の確認(または切り替え)

3

wx.ITEM_RADIO

ラジオメニュー項目

wx.Menuクラスには、種類パラメーターを必要としないAppendRadioItem()およびAppendCheckItem()もあります。

メニュー項目を設定して、アイコンまたはショートカットを表示できます。 wx.MenuItemクラスのSetBitmap()関数では、ビットマップオブジェクトを表示する必要があります。

wx.MenuItem.SetBitmap(wx.Bitmap(image file))

EVT_MENUイベントバインダーは、メニュー選択の処理に役立ちます。

self.Bind(wx.EVT_MENU, self.menuhandler)

次の例は、wxPythonの上記のメニューシステムの機能のほとんどを示しています。 メニューバーにファイルメニューが表示されます。 通常のメニュー項目、サブメニュー、ラジオ項目、チェック項目が追加されます。 アイコンのあるメニュー項目も存在します。

イベントハンドラは、呼び出されると、イベントに関連付けられたIDを取得し、さらに処理できます。 たとえば、「新規」メニュー項目が選択されている場合、フレームのテキストボックスにエコーされます。

完全なコードは次のとおりです-

import wx

class Mywin(wx.Frame):

   def __init__(self, parent, title):
      super(Mywin, self).__init__(parent, title = title, size = (250,150))
      self.InitUI()

   def InitUI(self):
      menubar = wx.MenuBar()

      fileMenu = wx.Menu()
      newitem = wx.MenuItem(fileMenu,wx.ID_NEW, text = "New",kind = wx.ITEM_NORMAL)
      newitem.SetBitmap(wx.Bitmap("new.bmp"))
      fileMenu.AppendItem(newitem)

      fileMenu.AppendSeparator()

      editMenu = wx.Menu()
      copyItem = wx.MenuItem(editMenu, 100,text = "copy",kind = wx.ITEM_NORMAL)
      copyItem.SetBitmap(wx.Bitmap("copy.bmp"))

      editMenu.AppendItem(copyItem)
      cutItem = wx.MenuItem(editMenu, 101,text = "cut",kind = wx.ITEM_NORMAL)
      cutItem.SetBitmap(wx.Bitmap("cut.bmp"))

      editMenu.AppendItem(cutItem)
      pasteItem = wx.MenuItem(editMenu, 102,text = "paste",kind = wx.ITEM_NORMAL)
      pasteItem.SetBitmap(wx.Bitmap("paste.bmp"))

      editMenu.AppendItem(pasteItem)
      fileMenu.AppendMenu(wx.ID_ANY, "Edit", editMenu)
      fileMenu.AppendSeparator()

      radio1 = wx.MenuItem(fileMenu, 200,text = "Radio1",kind = wx.ITEM_RADIO)
      radio2 = wx.MenuItem(fileMenu, 300,text = "radio2",kind = wx.ITEM_RADIO)

      fileMenu.AppendItem(radio1)
      fileMenu.AppendItem(radio2)
      fileMenu.AppendSeparator()

      fileMenu.AppendCheckItem(103,"Checkable")
      quit = wx.MenuItem(fileMenu, wx.ID_EXIT, '&Quit\tCtrl+Q')

      fileMenu.AppendItem(quit)
      menubar.Append(fileMenu, '&File')

      self.SetMenuBar(menubar)
      self.text = wx.TextCtrl(self,-1, style = wx.EXPAND|wx.TE_MULTILINE)
      self.Bind(wx.EVT_MENU, self.menuhandler)
      self.SetSize((350, 250))
      self.Centre()
      self.Show(True)

   def menuhandler(self, event):
      id = event.GetId()
      if id == wx.ID_NEW:
         self.text.AppendText("new"+"\n")

ex = wx.App()
Mywin(None,'MenuBar demo')
ex.MainLoop()

上記のコードは、次の出力を生成します-

メニューバー出力