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