]>
git.saurik.com Git - wxWidgets.git/blob - wxPython/demo/Menu.py
1 #-------------------------------------------------------------------
4 # menus in wxPython 2.3.3
6 #-------------------------------------------------------------------
7 # 11/20/2003 - Jeff Grimmett (grimmtooth@softhome.net)
9 # o Updated for wx namespace
16 #-------------------------------------------------------------------
18 class MyFrame(wx
.Frame
):
20 def __init__(self
, parent
, id, log
):
21 wx
.Frame
.__init
__(self
, parent
, id, 'Playing with menus', size
=(400, 200))
25 self
.CreateStatusBar()
26 self
.SetStatusText("This is the statusbar")
28 tc
= wx
.TextCtrl(self
, -1, """
29 A bunch of bogus menus have been created for this frame. You
30 can play around with them to see how they behave and then
31 check the source for this sample to see how to implement them.
32 """, style
=wx
.TE_READONLY|wx
.TE_MULTILINE
)
34 # Prepare the menu bar
35 menuBar
= wx
.MenuBar()
39 menu1
.Append(101, "&Mercury", "This the text in the Statusbar")
40 menu1
.Append(102, "&Venus", "")
41 menu1
.Append(103, "&Earth", "You may select Earth too")
42 menu1
.AppendSeparator()
43 menu1
.Append(104, "&Close", "Close this frame")
44 # Add menu to the menu bar
45 menuBar
.Append(menu1
, "&Planets")
49 menu2
.Append(201, "Hydrogen")
50 menu2
.Append(202, "Helium")
51 # a submenu in the 2nd menu
53 submenu
.Append(2031,"Lanthanium")
54 submenu
.Append(2032,"Cerium")
55 submenu
.Append(2033,"Praseodymium")
56 menu2
.AppendMenu(203, "Lanthanides", submenu
)
58 menuBar
.Append(menu2
, "&Elements")
62 menu3
.Append(301, "IDLE", "a Python shell using tcl/tk as GUI", wx
.ITEM_RADIO
)
63 menu3
.Append(302, "PyCrust", "a Python shell using wxPython as GUI", wx
.ITEM_RADIO
)
64 menu3
.Append(303, "psi", "a simple Python shell using wxPython as GUI", wx
.ITEM_RADIO
)
65 menu3
.AppendSeparator()
66 menu3
.Append(304, "project1", "", wx
.ITEM_NORMAL
)
67 menu3
.Append(305, "project2", "", wx
.ITEM_NORMAL
)
68 menuBar
.Append(menu3
, "&Shells")
72 menu4
.Append(401, "letters", "abcde...", wx
.ITEM_CHECK
)
73 menu4
.Append(402, "digits", "123...", wx
.ITEM_CHECK
)
74 menu4
.Append(403, "letters and digits", "abcd... + 123...", wx
.ITEM_CHECK
)
75 menuBar
.Append(menu4
, "Chec&k")
78 # Show how to put an icon in the menu
79 item
= wx
.MenuItem(menu5
, 500, "&Smile!\tCtrl+S", "This one has an icon")
80 item
.SetBitmap(images
.getSmilesBitmap())
81 menu5
.AppendItem(item
)
84 menu5
.Append(501, "Interesting thing\tCtrl+A", "Note the shortcut!")
85 menu5
.AppendSeparator()
86 menu5
.Append(502, "Hello\tShift+H")
87 menu5
.AppendSeparator()
88 menu5
.Append(503, "remove the submenu")
90 menu6
.Append(601, "Submenu Item")
91 menu5
.AppendMenu(504, "submenu", menu6
)
92 menu5
.Append(505, "remove this menu")
93 menu5
.Append(506, "this is updated")
94 menu5
.Append(507, "insert after this...")
95 menu5
.Append(508, "...and before this")
96 menuBar
.Append(menu5
, "&Fun")
98 self
.SetMenuBar(menuBar
)
101 self
.Bind(wx
.EVT_MENU_HIGHLIGHT_ALL
, self
.OnMenuHighlight
)
103 self
.Bind(wx
.EVT_MENU
, self
.Menu101
, id=101)
104 self
.Bind(wx
.EVT_MENU
, self
.Menu102
, id=102)
105 self
.Bind(wx
.EVT_MENU
, self
.Menu103
, id=103)
106 self
.Bind(wx
.EVT_MENU
, self
.CloseWindow
, id=104)
108 self
.Bind(wx
.EVT_MENU
, self
.Menu201
, id=201)
109 self
.Bind(wx
.EVT_MENU
, self
.Menu202
, id=202)
110 self
.Bind(wx
.EVT_MENU
, self
.Menu2031
, id=2031)
111 self
.Bind(wx
.EVT_MENU
, self
.Menu2032
, id=2032)
112 self
.Bind(wx
.EVT_MENU
, self
.Menu2033
, id=2033)
114 self
.Bind(wx
.EVT_MENU
, self
.Menu301To303
, id=301)
115 self
.Bind(wx
.EVT_MENU
, self
.Menu301To303
, id=302)
116 self
.Bind(wx
.EVT_MENU
, self
.Menu301To303
, id=303)
117 self
.Bind(wx
.EVT_MENU
, self
.Menu304
, id=304)
118 self
.Bind(wx
.EVT_MENU
, self
.Menu305
, id=305)
120 # Range of menu items
121 self
.Bind(wx
.EVT_MENU_RANGE
, self
.Menu401To403
, id=401, id2
=403)
123 self
.Bind(wx
.EVT_MENU
, self
.Menu500
, id=500)
124 self
.Bind(wx
.EVT_MENU
, self
.Menu501
, id=501)
125 self
.Bind(wx
.EVT_MENU
, self
.Menu502
, id=502)
126 self
.Bind(wx
.EVT_MENU
, self
.TestRemove
, id=503)
127 self
.Bind(wx
.EVT_MENU
, self
.TestRemove2
, id=505)
128 self
.Bind(wx
.EVT_MENU
, self
.TestInsert
, id=507)
129 self
.Bind(wx
.EVT_MENU
, self
.TestInsert
, id=508)
131 wx
.GetApp().Bind(wx
.EVT_UPDATE_UI
, self
.TestUpdateUI
, id=506)
135 def OnMenuHighlight(self
, event
):
136 # Show how to get menu item imfo from this event handler
137 id = event
.GetMenuId()
138 item
= self
.GetMenuBar().FindItemById(id)
139 text
= item
.GetText()
140 help = item
.GetHelp()
143 # but in this case just call Skip so the default is done
147 def Menu101(self
, event
):
148 self
.log
.write('Welcome to Mercury\n')
150 def Menu102(self
, event
):
151 self
.log
.write('Welcome to Venus\n')
153 def Menu103(self
, event
):
154 self
.log
.write('Welcome to the Earth\n')
156 def CloseWindow(self
, event
):
159 def Menu201(self
, event
):
160 self
.log
.write('Chemical element number 1\n')
162 def Menu202(self
, event
):
163 self
.log
.write('Chemical element number 2\n')
165 def Menu2031(self
, event
):
166 self
.log
.write('Element number 57\n')
168 def Menu2032(self
, event
):
169 self
.log
.write('Element number 58\n')
171 def Menu2033(self
, event
):
172 self
.log
.write('Element number 59\n')
174 def Menu301To303(self
, event
):
176 self
.log
.write('Event id: %d\n' % id)
178 def Menu304(self
, event
):
179 self
.log
.write('Not yet available\n')
181 def Menu305(self
, event
):
182 self
.log
.write('Still vapour\n')
184 def Menu401To403(self
, event
):
185 self
.log
.write('From a EVT_MENU_RANGE event\n')
187 def Menu500(self
, event
):
188 self
.log
.write('Have a happy day!\n')
190 def Menu501(self
, event
):
191 self
.log
.write('Look in the code how the shortcut has been realized\n')
193 def Menu502(self
, event
):
194 self
.log
.write('Hello from Jean-Michel\n')
197 def TestRemove(self
, evt
):
198 mb
= self
.GetMenuBar()
199 submenuItem
= mb
.FindItemById(601)
204 submenu
= submenuItem
.GetMenu()
205 menu
= submenu
.GetParent()
211 menu
.RemoveItem(mb
.FindItemById(504))
213 # This doesn't work, as expected since submenuItem is not on menu
214 #menu.RemoveItem(submenuItem)
217 def TestRemove2(self
, evt
):
218 mb
= self
.GetMenuBar()
222 def TestUpdateUI(self
, evt
):
227 def TestInsert(self
, evt
):
230 mb
= self
.GetMenuBar()
231 menuItem
= mb
.FindItemById(theID
)
232 menu
= menuItem
.GetMenu()
234 # figure out the position to insert at
237 for i
in menu
.GetMenuItems():
238 if i
.GetId() == theID
:
243 # now insert the new item
245 ##menu.Insert(pos, ID, "NewItem " + str(ID))
246 item
= wx
.MenuItem(menu
)
248 item
.SetText("NewItem " + str(ID
))
249 menu
.InsertItem(pos
, item
)
252 #-------------------------------------------------------------------
256 def runTest(frame
, nb
, log
):
257 win
= MyFrame(frame
, -1, log
)
262 #-------------------------------------------------------------------
266 A demo of using wxMenuBar and wxMenu in various ways.
268 A menu is a popup (or pull down) list of items, one of which may be selected
269 before the menu goes away (clicking elsewhere dismisses the menu). Menus may be
270 used to construct either menu bars or popup menus.
272 A menu item has an integer ID associated with it which can be used to identify
273 the selection, or to change the menu item in some way. A menu item with a special
274 identifier -1 is a separator item and doesn't have an associated command but just
275 makes a separator line appear in the menu.
277 Menu items may be either normal items, check items or radio items. Normal items
278 don't have any special properties while the check items have a boolean flag associated
279 to them and they show a checkmark in the menu when the flag is set. wxWindows
280 automatically toggles the flag value when the item is clicked and its value may
281 be retrieved using either IsChecked method of wxMenu or wxMenuBar itself or by
282 using wxEvent.IsChecked when you get the menu notification for the item in question.
284 The radio items are similar to the check items except that all the other items
285 in the same radio group are unchecked when a radio item is checked. The radio group
286 is formed by a contiguous range of radio items, i.e. it starts at the first item of
287 this kind and ends with the first item of a different kind (or the end of the menu).
288 Notice that because the radio groups are defined in terms of the item positions
289 inserting or removing the items in the menu containing the radio items risks to not
290 work correctly. Finally note that the radio items are only supported under Windows
296 if __name__
== '__main__':
299 run
.main(['', os
.path
.basename(sys
.argv
[0])])