First things first...
I'm not going to try and teach the Python language here. You can do that at the Python Tutorial. I'm also going to assume that you know a bit about wxWindows already, enough to notice the similarities in the classes used.
Take a look at the following wxPython program. You can find a similar program in the wxPython/demo directory, named DialogUnits.py. If your Python and wxPython are properly installed, you should be able to run it by issuing this command:
001: ## import all of the wxPython GUI package 002: from wxPython.wx import * 003: 004: ## Create a new frame class, derived from the wxPython Frame. 005: class MyFrame(wxFrame): 006: 007: def __init__(self, parent, id, title): 008: # First, call the base class' __init__ method to create the frame 009: wxFrame.__init__(self, parent, id, title, 010: wxPoint(100, 100), wxSize(160, 100)) 011: 012: # Associate some events with methods of this class 013: EVT_SIZE(self, self.OnSize) 014: EVT_MOVE(self, self.OnMove) 015: 016: # Add a panel and some controls to display the size and position 017: panel = wxPanel(self, -1) 018: wxStaticText(panel, -1, "Size:", 019: wxDLG_PNT(panel, wxPoint(4, 4)), wxDefaultSize) 020: wxStaticText(panel, -1, "Pos:", 021: wxDLG_PNT(panel, wxPoint(4, 14)), wxDefaultSize) 022: self.sizeCtrl = wxTextCtrl(panel, -1, "", 023: wxDLG_PNT(panel, wxPoint(24, 4)), 024: wxDLG_SZE(panel, wxSize(36, -1)), 025: wxTE_READONLY) 026: self.posCtrl = wxTextCtrl(panel, -1, "", 027: wxDLG_PNT(panel, wxPoint(24, 14)), 028: wxDLG_SZE(panel, wxSize(36, -1)), 029: wxTE_READONLY) 030: 031: 032: # This method is called automatically when the CLOSE event is 033: # sent to this window 034: def OnCloseWindow(self, event): 035: # tell the window to kill itself 036: self.Destroy() 037: 038: # This method is called by the system when the window is resized, 039: # because of the association above. 040: def OnSize(self, event): 041: size = event.GetSize() 042: self.sizeCtrl.SetValue("%s, %s" % (size.width, size.height)) 043: 044: # tell the event system to continue looking for an event handler, 045: # so the default handler will get called. 046: event.Skip() 047: 048: # This method is called by the system when the window is moved, 049: # because of the association above. 050: def OnMove(self, event): 051: pos = event.GetPosition() 052: self.posCtrl.SetValue("%s, %s" % (pos.x, pos.y)) 053: 054: 055: # Every wxWindows application must have a class derived from wxApp 056: class MyApp(wxApp): 057: 058: # wxWindows calls this method to initialize the application 059: def OnInit(self): 060: 061: # Create an instance of our customized Frame class 062: frame = MyFrame(NULL, -1, "This is a test") 063: frame.Show(true) 064: 065: # Tell wxWindows that this is our main window 066: self.SetTopWindow(frame) 067: 068: # Return a success flag 069: return true 070: 071: 072: app = MyApp(0) # Create an instance of the application class 073: app.MainLoop() # Tell it to start processing events 074:
Things to notice