]>
Commit | Line | Data |
---|---|---|
3115ef3e RD |
1 | #------------------------------------------------------------------- |
2 | # essaimenu.py | |
3 | # | |
4 | # menus in wxPython 2.3.3 | |
5 | # | |
6 | #------------------------------------------------------------------- | |
7 | ||
8 | from wxPython.wx import * | |
8dc6dcde | 9 | import images |
1fded56b RD |
10 | import time |
11 | ||
3115ef3e RD |
12 | #------------------------------------------------------------------- |
13 | ||
14 | class MyFrame(wxFrame): | |
15 | ||
16 | def __init__(self, parent, id, log): | |
17 | wxFrame.__init__(self, parent, id, 'Playing with menus', size=(400, 200)) | |
18 | self.log = log | |
19 | self.CenterOnScreen() | |
20 | ||
21 | self.CreateStatusBar() | |
22 | self.SetStatusText("This is the statusbar") | |
23 | ||
eb0f373c RD |
24 | tc = wxTextCtrl(self, -1, """ |
25 | A bunch of bogus menus have been created for this frame. You | |
26 | can play around with them to see how they behave and then | |
27 | check the source for this sample to see how to implement them. | |
28 | """, style=wxTE_READONLY|wxTE_MULTILINE) | |
29 | ||
3115ef3e RD |
30 | # Prepare the menu bar |
31 | menuBar = wxMenuBar() | |
32 | ||
33 | # 1st menu from left | |
34 | menu1 = wxMenu() | |
1e4a197e RD |
35 | menu1.Append(101, "&Mercury", "This the text in the Statusbar") |
36 | menu1.Append(102, "&Venus", "") | |
37 | menu1.Append(103, "&Earth", "You may select Earth too") | |
3115ef3e | 38 | menu1.AppendSeparator() |
1e4a197e | 39 | menu1.Append(104, "&Close", "Close this frame") |
3115ef3e RD |
40 | # Add menu to the menu bar |
41 | menuBar.Append(menu1, "&Planets") | |
42 | ||
43 | # 2nd menu from left | |
44 | menu2 = wxMenu() | |
45 | menu2.Append(201, "Hydrogen") | |
46 | menu2.Append(202, "Helium") | |
47 | # a submenu in the 2nd menu | |
48 | submenu = wxMenu() | |
49 | submenu.Append(2031,"Lanthanium") | |
50 | submenu.Append(2032,"Cerium") | |
51 | submenu.Append(2033,"Praseodymium") | |
52 | menu2.AppendMenu(203, "Lanthanides", submenu) | |
53 | # Append 2nd menu | |
54 | menuBar.Append(menu2, "&Elements") | |
55 | ||
56 | menu3 = wxMenu() | |
57 | menu3.Append(301, "IDLE", "a Python shell using tcl/tk as GUI", wxITEM_RADIO) | |
58 | menu3.Append(302, "PyCrust", "a Python shell using wxPython as GUI", wxITEM_RADIO) | |
59 | menu3.Append(303, "psi", "a simple Python shell using wxPython as GUI", wxITEM_RADIO) | |
60 | menu3.AppendSeparator() | |
61 | menu3.Append(304, "project1", "", wxITEM_NORMAL) | |
62 | menu3.Append(305, "project2", "", wxITEM_NORMAL) | |
63 | menuBar.Append(menu3, "&Shells") | |
64 | ||
65 | menu4 = wxMenu() | |
66 | menu4.Append(401, "letters", "abcde...", wxITEM_CHECK) | |
67 | menu4.Append(402, "digits", "123...", wxITEM_CHECK) | |
68 | menu4.Append(403, "letters and digits", "abcd... + 123...", wxITEM_CHECK) | |
69 | menuBar.Append(menu4, "Chec&k") | |
70 | ||
71 | menu5 = wxMenu() | |
8dc6dcde RD |
72 | # Show how to put an icon in the menu |
73 | item = wxMenuItem(menu5, 500, "&Smile!\tCtrl+S", "This one has an icon") | |
74 | item.SetBitmap(images.getSmilesBitmap()) | |
75 | menu5.AppendItem(item) | |
76 | ||
3115ef3e | 77 | menu5.Append(501, "Interesting thing\tCtrl+A", "Note the shortcut!") |
3115ef3e RD |
78 | menu5.AppendSeparator() |
79 | menu5.Append(502, "Hello\tShift+H") | |
1fded56b RD |
80 | menu5.AppendSeparator() |
81 | menu5.Append(503, "remove the submenu") | |
82 | menu6 = wxMenu() | |
83 | menu6.Append(601, "Submenu Item") | |
84 | menu5.AppendMenu(504, "submenu", menu6) | |
85 | menu5.Append(505, "remove this menu") | |
86 | menu5.Append(506, "this is updated") | |
87 | menu5.Append(507, "insert after this...") | |
88 | menu5.Append(508, "...and before this") | |
3115ef3e RD |
89 | menuBar.Append(menu5, "&Fun") |
90 | ||
91 | self.SetMenuBar(menuBar) | |
92 | ||
93 | # Menu events | |
1fded56b RD |
94 | EVT_MENU_HIGHLIGHT_ALL(self, self.OnMenuHighlight) |
95 | ||
3115ef3e RD |
96 | EVT_MENU(self, 101, self.Menu101) |
97 | EVT_MENU(self, 102, self.Menu102) | |
98 | EVT_MENU(self, 103, self.Menu103) | |
ba2b238e | 99 | EVT_MENU(self, 104, self.CloseWindow) |
3115ef3e RD |
100 | |
101 | EVT_MENU(self, 201, self.Menu201) | |
102 | EVT_MENU(self, 202, self.Menu202) | |
103 | EVT_MENU(self, 2031, self.Menu2031) | |
104 | EVT_MENU(self, 2032, self.Menu2032) | |
105 | EVT_MENU(self, 2033, self.Menu2033) | |
106 | ||
107 | EVT_MENU(self, 301, self.Menu301To303) | |
108 | EVT_MENU(self, 302, self.Menu301To303) | |
109 | EVT_MENU(self, 303, self.Menu301To303) | |
110 | EVT_MENU(self, 304, self.Menu304) | |
111 | EVT_MENU(self, 305, self.Menu305) | |
112 | ||
113 | EVT_MENU_RANGE(self, 401, 403, self.Menu401To403) | |
114 | ||
8dc6dcde | 115 | EVT_MENU(self, 500, self.Menu500) |
3115ef3e RD |
116 | EVT_MENU(self, 501, self.Menu501) |
117 | EVT_MENU(self, 502, self.Menu502) | |
1fded56b RD |
118 | EVT_MENU(self, 503, self.TestRemove) |
119 | EVT_MENU(self, 505, self.TestRemove2) | |
120 | EVT_MENU(self, 507, self.TestInsert) | |
121 | EVT_MENU(self, 508, self.TestInsert) | |
122 | ||
123 | EVT_UPDATE_UI(wxGetApp(), 506, self.TestUpdateUI) | |
3115ef3e RD |
124 | |
125 | # Methods | |
126 | ||
1fded56b RD |
127 | def OnMenuHighlight(self, event): |
128 | # Show how to get menu item imfo from this event handler | |
129 | id = event.GetMenuId() | |
130 | item = self.GetMenuBar().FindItemById(id) | |
131 | text = item.GetText() | |
132 | help = item.GetHelp() | |
133 | #print text, help | |
134 | event.Skip() # but in this case just call Skip so the default is done | |
135 | ||
136 | ||
3115ef3e RD |
137 | def Menu101(self, event): |
138 | self.log.write('Welcome to Mercury\n') | |
139 | ||
140 | def Menu102(self, event): | |
141 | self.log.write('Welcome to Venus\n') | |
142 | ||
143 | def Menu103(self, event): | |
144 | self.log.write('Welcome to the Earth\n') | |
145 | ||
ba2b238e RD |
146 | def CloseWindow(self, event): |
147 | self.Close() | |
3115ef3e RD |
148 | |
149 | def Menu201(self, event): | |
150 | self.log.write('Chemical element number 1\n') | |
151 | ||
152 | def Menu202(self, event): | |
153 | self.log.write('Chemical element number 2\n') | |
154 | ||
155 | def Menu2031(self, event): | |
156 | self.log.write('Element number 57\n') | |
157 | ||
158 | def Menu2032(self, event): | |
159 | self.log.write('Element number 58\n') | |
160 | ||
161 | def Menu2033(self, event): | |
162 | self.log.write('Element number 59\n') | |
163 | ||
164 | def Menu301To303(self, event): | |
165 | id = event.GetId() | |
166 | self.log.write('Event id: %d\n' % id) | |
167 | ||
168 | def Menu304(self, event): | |
169 | self.log.write('Not yet available\n') | |
170 | ||
171 | def Menu305(self, event): | |
172 | self.log.write('Still vapour\n') | |
173 | ||
174 | def Menu401To403(self, event): | |
175 | self.log.write('From a EVT_MENU_RANGE event\n') | |
176 | ||
8dc6dcde RD |
177 | def Menu500(self, event): |
178 | self.log.write('Have a happy day!\n') | |
179 | ||
3115ef3e RD |
180 | def Menu501(self, event): |
181 | self.log.write('Look in the code how the shortcut has been realized\n') | |
182 | ||
183 | def Menu502(self, event): | |
184 | self.log.write('Hello from Jean-Michel\n') | |
185 | ||
1fded56b RD |
186 | |
187 | def TestRemove(self, evt): | |
188 | mb = self.GetMenuBar() | |
189 | submenuItem = mb.FindItemById(601) | |
190 | if not submenuItem: | |
191 | return | |
192 | submenu = submenuItem.GetMenu() | |
193 | menu = submenu.GetParent() | |
194 | ||
195 | #menu.Remove(504) # works | |
196 | menu.RemoveItem(mb.FindItemById(504)) # this also works | |
197 | #menu.RemoveItem(submenuItem) # doesn't work, as expected since submenuItem is not on menu | |
198 | ||
199 | ||
200 | def TestRemove2(self, evt): | |
201 | mb = self.GetMenuBar() | |
202 | mb.Remove(4) | |
203 | ||
204 | ||
205 | def TestUpdateUI(self, evt): | |
206 | text = time.ctime() | |
207 | evt.SetText(text) | |
208 | ||
209 | ||
210 | def TestInsert(self, evt): | |
211 | # get the menu | |
212 | mb = self.GetMenuBar() | |
213 | menuItem = mb.FindItemById(507) | |
214 | menu = menuItem.GetMenu() | |
215 | ||
216 | ID = wxNewId() | |
217 | ##menu.Insert(9, ID, "NewItem " + str(ID)) | |
218 | item = wxMenuItem(menu) | |
219 | item.SetId(ID) | |
220 | item.SetText("NewItem " + str(ID)) | |
221 | menu.InsertItem(9, item) | |
222 | ||
223 | ||
224 | ||
3115ef3e RD |
225 | #------------------------------------------------------------------- |
226 | ||
1fded56b RD |
227 | wxRegisterId(10000) |
228 | ||
3115ef3e RD |
229 | def runTest(frame, nb, log): |
230 | win = MyFrame(frame, -1, log) | |
231 | frame.otherWin = win | |
1e4a197e | 232 | win.Show(True) |
3115ef3e RD |
233 | |
234 | ||
235 | #------------------------------------------------------------------- | |
236 | ||
237 | ||
238 | overview = """\ | |
239 | A demo of using wxMenuBar and wxMenu in various ways. | |
240 | """ | |
241 | ||
242 | ||
243 | ||
244 | ||
245 | if __name__ == '__main__': | |
246 | import sys,os | |
247 | import run | |
248 | run.main(['', os.path.basename(sys.argv[0])]) | |
249 |