# coding:utf-8
import wx
import inspect
def funcname():
return inspect.stack()[1][3]
def classname(obj):
return obj.__class__.__name__
# メニューアイテムの ID
MENU1_ID_BASE = 1000
MENU1_ID_HOGE = MENU1_ID_BASE + 0
MENU1_ID_PIYO = MENU1_ID_BASE + 1
MENU1_ID_FOO = MENU1_ID_BASE + 2
MENU1_ID_SIZE = 3
def create_menu1():
menu = wx.Menu()
menu.Append(MENU1_ID_HOGE, 'hoge')
menu.Append(MENU1_ID_PIYO, 'piyo', kind=wx.ITEM_CHECK)
menu.Append(MENU1_ID_FOO, 'foo')
# HOGE は呼び出される
# PIYO は呼び出されない。EVT_MENU を設定しなければ呼び出される
# これを行わずにクリックイベントを Connect, Bind してもそれらは呼び出されなかった
menu.Connect(MENU1_ID_BASE, MENU1_ID_BASE + 2, wx.EVT_MENU_RANGE.typeId, on_menu1_menu_range)
# MENU_RANGE は呼び出されず、こちらだけ呼び出される
# これを設定しない場合は EVENT_RANGE のほうが呼び出される
menu.Connect(MENU1_ID_PIYO, -1, wx.EVT_MENU.typeId, on_menu1_menu)
# 呼び出される
menu.Connect(MENU1_ID_FOO, -1, wx.EVT_MENU.typeId, on_menu1_menu)
# UpdateUI(menu) で呼び出される
menu.Connect(MENU1_ID_BASE, MENU1_ID_BASE + MENU1_ID_SIZE, wx.EVT_UPDATE_UI.typeId, on_menu1_update_ui)
# 呼び出されない。左クリックでは EVT_MENU | EVT_MENU_RANGE が呼びだされる。EVT_MENU を設定していない場合も呼び出されない。
menu.Connect(MENU1_ID_BASE, MENU1_ID_BASE + MENU1_ID_SIZE, wx.EVT_LEFT_UP.typeId, on_menu1_left_up)
# 呼び出されない。左クリックでは EVT_MENU | EVT_MENU_RANGE が呼びだされる。EVT_MENU を設定していない場合も呼び出されない。
menu.Connect(MENU1_ID_BASE, MENU1_ID_BASE + MENU1_ID_SIZE, wx.EVT_COMMAND_LEFT_CLICK.typeId, on_menu1_command_left_click)
# 呼び出されない。右クリックでは EVT_MENU | EVT_MENU_RANGE が呼びだされる。EVT_MENU を設定していない場合も呼び出されない。
menu.Connect(MENU1_ID_BASE, MENU1_ID_BASE + MENU1_ID_SIZE, wx.EVT_RIGHT_UP.typeId, on_menu1_right_up)
# 呼び出されない。右クリックでは EVT_MENU | EVT_MENU_RANGE が呼びだされる。EVT_MENU を設定していない場合も呼び出されない。
menu.Connect(MENU1_ID_BASE, MENU1_ID_BASE + MENU1_ID_SIZE, wx.EVT_COMMAND_RIGHT_CLICK.typeId, on_menu1_command_right_click)
# 呼び出されない。右クリックでは EVT_MENU | EVT_MENU_RANGE が呼び出される。EVT_MENU を設定していない場合も呼び出されない。
menu.Connect(MENU1_ID_BASE, MENU1_ID_BASE + MENU1_ID_SIZE, wx.EVT_CONTEXT_MENU.typeId, on_menu1_context_menu)
# 呼び出されない。 Connect と同様だった。
menu.Bind(wx.EVT_LEFT_UP, on_menu1_left_up_2)
# 呼び出されない。 Connect と同様だった。
menu.Bind(wx.EVT_COMMAND_LEFT_CLICK, on_menu1_command_left_click_2)
# 呼び出されない。 Connect と同様だった。
menu.Bind(wx.EVT_RIGHT_UP, on_menu1_right_up_2)
# 呼び出されない。 Connect と同様だった。
menu.Bind(wx.EVT_COMMAND_RIGHT_CLICK, on_menu1_command_right_click_2)
# 呼び出されない。 Connect と同様だった。
menu.Bind(wx.EVT_CONTEXT_MENU, on_menu1_context_menu_2)
return menu
def on_menu1_menu_range(event):
id = event.GetId()
print funcname() + ' called.' + ' id = ' + str(id)
menu = event.GetEventObject()
menuitem = menu.FindItemById(id)
if menuitem.IsCheckable():
print '\tcheck'
menu.UpdateUI(menu)
def on_menu1_menu(event):
print funcname() + ' called.'+ ' id = ' + str(event.GetId())
def on_menu1_update_ui(event):
print funcname() + ' called.'+ ' id = ' + str(event.GetId())
def on_menu1_left_up(event):
print funcname() + ' called.' + ' id = ' + str(event.GetId())
def on_menu1_command_left_click(event):
print funcname() + ' called.' + ' id = ' + str(event.GetId())
def on_menu1_right_up(event):
print funcname() + ' called.' + ' id = ' + str(event.GetId())
def on_menu1_command_right_click(event):
print funcname() + ' called.' + ' id = ' + str(event.GetId())
def on_menu1_context_menu(event):
print funcname() + ' called.' + ' id = ' + str(event.GetId())
def on_menu1_left_up_2(event):
print funcname() + ' called.' + ' id = ' + str(event.GetId())
def on_menu1_command_left_click_2(event):
print funcname() + ' called.' + ' id = ' + str(event.GetId())
def on_menu1_right_up_2(event):
print funcname() + ' called.' + ' id = ' + str(event.GetId())
def on_menu1_command_right_click_2(event):
print funcname() + ' called.' + ' id = ' + str(event.GetId())
def on_menu1_context_menu_2(event):
print funcname() + ' called.' + ' id = ' + str(event.GetId())
class SampleFrame(wx.Frame):
def __init__(self, parent, title):
wx.Frame.__init__(self, parent, title=title, size=(320, 240))
sizer = wx.BoxSizer(wx.VERTICAL)
self.popup_menu = create_menu1()
self.Bind(wx.EVT_RIGHT_UP, self.on_right_up)
self.SetSizer(sizer)
self.SetAutoLayout(True)
def on_right_up(self, event):
#print classname(self) + '.' + funcname() + ' called. '
self.PopupMenu(self.popup_menu)
if __name__ == '__main__':
app = wx.App(False)
frame = SampleFrame(None, "Study Menu")
frame.Show()
app.MainLoop()