]>
git.saurik.com Git - wxWidgets.git/blob - wxPython/demo/PopupMenu.py
1 # 11/13/2003 - Jeff Grimmett (grimmtooth@softhome.net)
3 # o Updated for wx namespace
9 #----------------------------------------------------------------------
13 Right-click on any bare area of this panel (or Ctrl-click on the Mac)
14 to show a popup menu. Then look at the code for this sample. Notice
15 how the PopupMenu method is similar to the ShowModal method of a
16 wx.Dialog in that it doesn't return until the popup menu has been
17 dismissed. The event handlers for the popup menu items can either be
18 attached to the menu itself, or to the window that invokes PopupMenu.
21 #----------------------------------------------------------------------
23 class TestPanel(wx
.Panel
):
24 def __init__(self
, parent
, log
):
26 wx
.Panel
.__init
__(self
, parent
, -1)
27 box
= wx
.BoxSizer(wx
.VERTICAL
)
29 # Make and layout the controls
30 fs
= self
.GetFont().GetPointSize()
31 bf
= wx
.Font(fs
+4, wx
.SWISS
, wx
.NORMAL
, wx
.BOLD
)
32 nf
= wx
.Font(fs
+2, wx
.SWISS
, wx
.NORMAL
, wx
.NORMAL
)
34 t
= wx
.StaticText(self
, -1, "PopupMenu")
36 box
.Add(t
, 0, wx
.CENTER|wx
.ALL
, 5)
37 self
.Bind(wx
.EVT_RIGHT_UP
, self
.OnRightClick
)
40 box
.Add(wx
.StaticLine(self
, -1), 0, wx
.EXPAND
)
43 t
= wx
.StaticText(self
, -1, text
)
45 box
.Add(t
, 0, wx
.CENTER|wx
.ALL
, 5)
49 self
.Bind(wx
.EVT_RIGHT_UP
, self
.OnRightClick
)
52 def OnRightClick(self
, event
):
53 self
.log
.WriteText("OnRightClick\n")
55 # only do this part the first time so the events are only bound once
57 # Yet another anternate way to do IDs. Some prefer them up top to
58 # avoid clutter, some prefer them close to the object of interest
60 if not hasattr(self
, "popupID1"):
61 self
.popupID1
= wx
.NewId()
62 self
.popupID2
= wx
.NewId()
63 self
.popupID3
= wx
.NewId()
64 self
.popupID4
= wx
.NewId()
65 self
.popupID5
= wx
.NewId()
66 self
.popupID6
= wx
.NewId()
67 self
.popupID7
= wx
.NewId()
68 self
.popupID8
= wx
.NewId()
69 self
.popupID9
= wx
.NewId()
71 self
.Bind(wx
.EVT_MENU
, self
.OnPopupOne
, id=self
.popupID1
)
72 self
.Bind(wx
.EVT_MENU
, self
.OnPopupTwo
, id=self
.popupID2
)
73 self
.Bind(wx
.EVT_MENU
, self
.OnPopupThree
, id=self
.popupID3
)
74 self
.Bind(wx
.EVT_MENU
, self
.OnPopupFour
, id=self
.popupID4
)
75 self
.Bind(wx
.EVT_MENU
, self
.OnPopupFive
, id=self
.popupID5
)
76 self
.Bind(wx
.EVT_MENU
, self
.OnPopupSix
, id=self
.popupID6
)
77 self
.Bind(wx
.EVT_MENU
, self
.OnPopupSeven
, id=self
.popupID7
)
78 self
.Bind(wx
.EVT_MENU
, self
.OnPopupEight
, id=self
.popupID8
)
79 self
.Bind(wx
.EVT_MENU
, self
.OnPopupNine
, id=self
.popupID9
)
83 # Show how to put an icon in the menu
84 item
= wx
.MenuItem(menu
, self
.popupID1
,"One")
85 item
.SetBitmap(images
.getSmilesBitmap())
87 # add some other items
88 menu
.Append(self
.popupID2
, "Two")
89 menu
.Append(self
.popupID3
, "Three")
90 menu
.Append(self
.popupID4
, "Four")
91 menu
.Append(self
.popupID5
, "Five")
92 menu
.Append(self
.popupID6
, "Six")
95 sm
.Append(self
.popupID8
, "sub item 1")
96 sm
.Append(self
.popupID9
, "sub item 1")
97 menu
.AppendMenu(self
.popupID7
, "Test Submenu", sm
)
100 # Popup the menu. If an item is selected then its handler
101 # will be called before PopupMenu returns.
102 self
.PopupMenu(menu
, event
.GetPosition())
106 def OnPopupOne(self
, event
):
107 self
.log
.WriteText("Popup one\n")
109 def OnPopupTwo(self
, event
):
110 self
.log
.WriteText("Popup two\n")
112 def OnPopupThree(self
, event
):
113 self
.log
.WriteText("Popup three\n")
115 def OnPopupFour(self
, event
):
116 self
.log
.WriteText("Popup four\n")
118 def OnPopupFive(self
, event
):
119 self
.log
.WriteText("Popup five\n")
121 def OnPopupSix(self
, event
):
122 self
.log
.WriteText("Popup six\n")
124 def OnPopupSeven(self
, event
):
125 self
.log
.WriteText("Popup seven\n")
127 def OnPopupEight(self
, event
):
128 self
.log
.WriteText("Popup eight\n")
130 def OnPopupNine(self
, event
):
131 self
.log
.WriteText("Popup nine\n")
137 #----------------------------------------------------------------------
139 def runTest(frame
, nb
, log
):
140 win
= TestPanel(nb
, log
)
143 #----------------------------------------------------------------------
147 overview
= """<html><body>
148 <h2><center>PopupMenu</center></h2>
155 if __name__
== '__main__':
158 run
.main(['', os
.path
.basename(sys
.argv
[0])])