8bf5d46efb
Added the missing wxWindow.GetUpdateRegion() method. Made a new change in SWIG (update your patches everybody) that provides a fix for global shadow objects that get an exception in their __del__ when their extension module has already been deleted. It was only a 1 line change in .../SWIG/Modules/pycpp.cxx at about line 496 if you want to do it by hand. It is now possible to run through MainLoop more than once in any one process. The cleanup that used to happen as MainLoop completed (and prevented it from running again) has been delayed until the wxc module is being unloaded by Python. wxWindow.PopupMenu() now takes a wxPoint instead of x,y. Added wxWindow.PopupMenuXY to be consistent with some other methods. Added wxGrid.SetEditInPlace and wxGrid.GetEditInPlace. You can now provide your own app.MainLoop method. See wxPython/demo/demoMainLoop.py for an example and some explaination. Got the in-place-edit for the wxTreeCtrl fixed and added some demo code to show how to use it. Put the wxIcon constructor back in for GTK as it now has one that matches MSW's. Added wxGrid.GetCells Added wxSystemSettings static methods as functions with names like wxSystemSettings_GetSystemColour. Removed wxPyMenu since using menu callbacks have been depreciated in wxWindows. Use wxMenu and events instead. Added alternate wxBitmap constructor (for MSW only) as wxBitmapFromData(data, type, width, height, depth = 1) Added a helper function named wxPyTypeCast that can convert shadow objects of one type into shadow objects of another type. (Like doing a down-cast.) See the implementation in wx.py for some docs. git-svn-id: https://svn.wxwidgets.org/svn/wx/wxWidgets/trunk@3223 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()
|
|
|
|
|
|
|
|
|
|
|