# 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()