Listing 2. The Fortune Cookie Program
#
#
1 #!/usr/bin/env python
2 #---------------------------------------------
3 # Name: Cookie.Py
4 # Purpose: A silly `fortune' application
5 #---------------------------------------------
7 ## import all of the wxPython GUI package
8 from wxPython.wx import *
9
10 ## Create a new frame class, derived from the wxPython Frame.
11 class MyFrame(wxFrame):
12 def __init__(self, parent, id, title):
13 self.myFortunes = [
14 "A fox is a wolf who sends flowers.",
15 "A good man always knows his limitations.",
16 "A man may be so much of everything that " +\
17 "he is nothing of anything.",
18 ]
19 self.which = 0
20 myMenuTable = (
21 ['&File',
22 ('&New', 'Get a new cookie', self.OnButtonClick),
23 ('---',),
24 ('E&xit', 'Leave the application', self.exitApp)],
25 )
26 # Call the parent class method
27 wxFrame.__init__(self, parent, id, title,
28 wxPoint(100, 100), wxSize(160, 100))
29 # Add a panel to place things in
30 panel = wxPanel(self, -1)
31 self.text = wxStaticText(panel, 1009, \
32 "Click on button to get a cookie!", \
33 wxPoint(40,25), wxSize(150,80))
34 button = wxButton(self, 1010, "New cookie", \
35 wxPoint(150,90), wxSize(70,20))
36 # window layout
37 box = wxBoxSizer(wxVERTICAL)
38 spacer = wxBoxSizer(wxHORIZONTAL)
39 spacer.Add(0, 0, 1, wxEXPAND)
40 spacer.Add(button, 0, wxALIGN_BOTTOM)
41 spacer.Add(0, 0, 1, wxEXPAND)
42 box.Add(panel, 1, wxEXPAND)
43 box.Add(spacer, 0, wxEXPAND)
44 # associate button with event
45 EVT_BUTTON(self, 1010, self.OnButtonClick)
46 # associate close event with handling method
47 EVT_CLOSE(self, self.OnCloseWindow)
48 # make a status bar
49 self.CreateStatusBar()
50 # Make a main menu
51 self.mainmenu = wxMenuBar()
52 # fill the `file menu table'
53 for submenu in myMenuTable:
54 newMenu = wxMenu()
55 for item in submenu[1:]:
56 if (item[0] != '---'):
57 fmID = NewId()
58 newMenu.Append(fmID, item[0], item[1])
59 EVT_MENU(self, fmID, item[2])
60 else:
61 newMenu.AppendSeparator()
62 # fill the main menu
63 self.mainmenu.Append(newMenu, submenu[0])
64 self.SetMenuBar(self.mainmenu)
65 self.Fit()
66 self.SetSizer(box)
67 self.SetAutoLayout(true)
69 def OnButtonClick(self, event):
70 self.text.SetLabel(self.myFortunes[self.which \
71 % len(self.myFortunes)])
72 self.which = self.which + 1
74 # This method is called automatically when the CLOSE event is
75 # sent to this window
76 def OnCloseWindow(self, event):
77 ruSure=wxMessageDialog(self, "Do you want to quit?",\
78 "Leaving Cookie", \
79 wxOK | wxCANCEL | wxICON_QUESTION)
80 if (ruSure.ShowModal() == wxID_CANCEL):
81 event.Veto()
82 else:
83 print "# Bye bye"
84 # tell the window to kill itself
85 self.Destroy()
87 def exitApp(self,event):
88 self.Close()
90 # Every wxWindows application must have a class derived from wxApp
91 class MyApp(wxApp):
92 # wxWindows calls this method to initialize the application
93 def OnInit(self):
94 # Create an instance of our customized Frame class
95 frame = MyFrame(NULL, -1, "Cookies!")
96 frame.Show(true)
97 # Tell wxWindows that this is our main window
98 self.SetTopWindow(frame)
99 # Return a success flag
100 return true
102 # if running standalone
103 if __name__ == "__main__":
104 app = MyApp(0) # Create an instance of the application class
105 app.MainLoop() # Tell it to start processing events