[ create a new paste ] login | about

Link: http://codepad.org/S9vtw4yX    [ raw code | fork ]

Python, pasted on Dec 29:
# 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()


Create a new paste based on this one


Comments: