git-svn-id: https://svn.wxwidgets.org/svn/wx/wxWidgets/trunk@7748 c3d73ce0-8a6f-49c7-b76d-6d57e0e08775
		
			
				
	
	
		
			124 lines
		
	
	
		
			3.3 KiB
		
	
	
	
		
			Python
		
	
	
	
	
	
			
		
		
	
	
			124 lines
		
	
	
		
			3.3 KiB
		
	
	
	
		
			Python
		
	
	
	
	
	
| # popup.py:
 | |
| # Illustrates how to create a wxListCtrl with an associated pop-up menu, which is
 | |
| # activated when the right mouse button is clicked.
 | |
| 
 | |
| from wxPython.wx import *
 | |
| 
 | |
| 
 | |
| class cPopupHandler(wxEvtHandler):
 | |
| 
 | |
|     def __init__(self, this):
 | |
|         wxEvtHandler.__init__(self, this)
 | |
| 
 | |
| 
 | |
|     def ProcessEvent(self, event):
 | |
|         print "G"
 | |
|         #wxEvtHandler.ProcessEvent(self, event)
 | |
| 
 | |
|         if event.GetEventClass() != wxTYPE_MOUSE_EVENT:
 | |
|             return
 | |
| 
 | |
|         if not event.ButtonUp(3):
 | |
|             return
 | |
| 
 | |
|         if event.ButtonDown(1):
 | |
|             print "left down"
 | |
|         elif event.ButtonUp(1):
 | |
|             print "left up"
 | |
|         elif event.ButtonDown(3):
 | |
|             print "right down"
 | |
|         elif event.ButtonUp(3):
 | |
|             print "right up"
 | |
| 
 | |
| 
 | |
|     def xProcessEvent(self, event):
 | |
|         # I tried to pass this one in as the Connect() handler,
 | |
|         # but all I got from that was that the icons disappeared
 | |
|         # from the wxListCtrl.
 | |
|         print "H"
 | |
|         pass
 | |
| 
 | |
| 
 | |
| 
 | |
| class cMyFrame(wxFrame):
 | |
| 
 | |
|     def __init__(self, parent, id, title):
 | |
|         wxFrame.__init__(self, parent, -1, title, wxDefaultPosition, wxSize(800, 600))
 | |
| 
 | |
|         self.Centre(wxBOTH)
 | |
| 
 | |
|         # create a dummy icon; can't seem to get the wxListCtrl to work without an icon
 | |
|         #self.imagelist = wxImageList(16, 16)
 | |
|         #self.image = self.imagelist.Add(wxNoRefBitmap('smile.bmp', wxBITMAP_TYPE_BMP))
 | |
| 
 | |
|         # create a ListCtrl
 | |
|         id = NewId()
 | |
|         self.listctrl = wxListCtrl(self, id, wxDefaultPosition, wxDefaultSize, wxLC_REPORT)
 | |
|         #self.listctrl.SetImageList(self.imagelist, wxIMAGE_LIST_SMALL)
 | |
| 
 | |
|         if 1:
 | |
|             # install a handler for mouse right button up events
 | |
|             #EVT_RIGHT_DOWN(self.listctrl, self.OnListMouseEvent)
 | |
|             #EVT_RIGHT_UP(self.listctrl, self.OnListMouseEvent)
 | |
| 
 | |
|             #EVT_RIGHT_DOWN(self.listctrl, self.OnSaveMousePos)
 | |
| 
 | |
|             EVT_LIST_ITEM_SELECTED(self, id, self.OnSaveSelection)
 | |
|             EVT_COMMAND_RIGHT_CLICK(self, id, self.OnListRightClick)
 | |
|         else:
 | |
|             # create an wxEvtHandler and connect it to the wxListCtrl
 | |
|             print "A"
 | |
|             self.listctrl.handler = cPopupHandler(self.listctrl)
 | |
|             print "B"
 | |
|             id = NewId()
 | |
|             self.listctrl.Connect(id, id, wxEVT_RIGHT_DOWN, self.OnListMouseEvent)
 | |
|             print "C"
 | |
| 
 | |
|         # define the ListCtrl column
 | |
|         self.listctrl.InsertColumn(0, "Name")
 | |
| 
 | |
|         # create a set of dummy ListCtrl entries
 | |
|         for Index in range(20):
 | |
|             self.listctrl.InsertStringItem(Index, "Item number %d" % Index)
 | |
| 
 | |
|         # re-adjust the width of the column
 | |
|         self.listctrl.SetColumnWidth(0, wxLIST_AUTOSIZE_USEHEADER)
 | |
| 
 | |
| 
 | |
|     def OnSaveSelection(self, event):
 | |
|         self.lastSelection = event.m_itemIndex
 | |
|         print self.lastSelection
 | |
| 
 | |
| 
 | |
|     def OnListRightClick(self, event):
 | |
|         menu = wxPyMenu()
 | |
|         menu.Append(0, "One")
 | |
|         menu.Append(1, "Two")
 | |
|         menu.Append(2, "Three")
 | |
| 
 | |
|         pos = self.listctrl.GetItemPosition(self.lastSelection)
 | |
|         self.listctrl.PopupMenu(menu, pos.x, pos.y)
 | |
| 
 | |
| 
 | |
| class cMyApp(wxApp):
 | |
| 
 | |
|     def OnInit(self):
 | |
|         frame = cMyFrame(NULL, -1, "Popup Sample")
 | |
|         frame.Show(true)
 | |
|         self.SetTopWindow(frame)
 | |
|         return true
 | |
| 
 | |
| 
 | |
| def main():
 | |
|     App = cMyApp(0)
 | |
|     App.MainLoop()
 | |
| 
 | |
| 
 | |
| if __name__ == "__main__":
 | |
|     main()
 | |
| 
 | |
| 
 | |
| 
 | |
| 
 | |
| 
 |