Wxpython-menus
メニュー項目、メニューおよびメニューバー
最上位ウィンドウのタイトルバーのすぐ下にある水平バーは、一連のメニューを表示するために予約されています。 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()
上記のコードは、次の出力を生成します-