]>
git.saurik.com Git - wxWidgets.git/blob - wxPython/demo/Wizard.py
3 import wx
.wizard
as wiz
6 #----------------------------------------------------------------------
8 def makePageTitle(wizPg
, title
):
9 sizer
= wx
.BoxSizer(wx
.VERTICAL
)
11 title
= wx
.StaticText(wizPg
, -1, title
)
12 title
.SetFont(wx
.Font(18, wx
.SWISS
, wx
.NORMAL
, wx
.BOLD
))
13 sizer
.Add(title
, 0, wx
.ALIGN_CENTRE|wx
.ALL
, 5)
14 sizer
.Add(wx
.StaticLine(wizPg
, -1), 0, wx
.EXPAND|wx
.ALL
, 5)
17 #----------------------------------------------------------------------
19 class TitledPage(wiz
.WizardPageSimple
):
20 def __init__(self
, parent
, title
):
21 wiz
.WizardPageSimple
.__init
__(self
, parent
)
22 self
.sizer
= makePageTitle(self
, title
)
25 #----------------------------------------------------------------------
27 class SkipNextPage(wiz
.PyWizardPage
):
28 def __init__(self
, parent
, title
):
29 wiz
.PyWizardPage
.__init
__(self
, parent
)
30 self
.next
= self
.prev
= None
31 self
.sizer
= makePageTitle(self
, title
)
33 self
.cb
= wx
.CheckBox(self
, -1, "Skip next page")
34 self
.sizer
.Add(self
.cb
, 0, wx
.ALL
, 5)
36 def SetNext(self
, next
):
39 def SetPrev(self
, prev
):
43 # Classes derived from wxPyWizardPanel must override
44 # GetNext and GetPrev, and may also override GetBitmap
45 # as well as all those methods overridable by
49 """If the checkbox is set then return the next page's next page"""
51 if self
.cb
.GetValue():
58 #----------------------------------------------------------------------
60 class UseAltBitmapPage(wiz
.PyWizardPage
):
61 def __init__(self
, parent
, title
):
62 wiz
.PyWizardPage
.__init
__(self
, parent
)
63 self
.next
= self
.prev
= None
64 self
.sizer
= makePageTitle(self
, title
)
66 self
.sizer
.Add(wx
.StaticText(self
, -1, "This page uses a different bitmap"),
69 def SetNext(self
, next
):
72 def SetPrev(self
, prev
):
82 # You usually wouldn't need to override this method
83 # since you can set a non-default bitmap in the
84 # wxWizardPageSimple constructor, but if you need to
85 # dynamically change the bitmap based on the
86 # contents of the wizard, or need to also change the
87 # next/prev order then it can be done by overriding
89 return images
.getWizTest2Bitmap()
91 #----------------------------------------------------------------------
93 class TestPanel(wx
.Panel
):
94 def __init__(self
, parent
, log
):
96 wx
.Panel
.__init
__(self
, parent
, -1)
98 b
= wx
.Button(self
, -1, "Run Simple Wizard", pos
=(50, 50))
99 self
.Bind(wx
.EVT_BUTTON
, self
.OnRunSimpleWizard
, b
)
101 b
= wx
.Button(self
, -1, "Run Dynamic Wizard", pos
=(50, 100))
102 self
.Bind(wx
.EVT_BUTTON
, self
.OnRunDynamicWizard
, b
)
104 self
.Bind(wiz
.EVT_WIZARD_PAGE_CHANGED
, self
.OnWizPageChanged
)
105 self
.Bind(wiz
.EVT_WIZARD_PAGE_CHANGING
, self
.OnWizPageChanging
)
106 self
.Bind(wiz
.EVT_WIZARD_CANCEL
, self
.OnWizCancel
)
109 def OnWizPageChanged(self
, evt
):
110 if evt
.GetDirection():
116 self
.log
.write("OnWizPageChanged: %s, %s\n" % (dir, page
.__class
__))
119 def OnWizPageChanging(self
, evt
):
120 if evt
.GetDirection():
126 self
.log
.write("OnWizPageChanging: %s, %s\n" % (dir, page
.__class
__))
129 def OnWizCancel(self
, evt
):
131 self
.log
.write("OnWizCancel: %s\n" % page
.__class
__)
133 # Show how to prevent cancelling of the wizard. The
134 # other events can be Veto'd too.
135 if page
is self
.page1
:
136 wx
.MessageBox("Cancelling on the first page has been prevented.", "Sorry")
140 def OnWizFinished(self
, evt
):
141 self
.log
.write("OnWizFinished\n")
144 def OnRunSimpleWizard(self
, evt
):
145 # Create the wizard and the pages
146 wizard
= wiz
.Wizard(self
, -1, "Simple Wizard", images
.getWizTest1Bitmap())
147 page1
= TitledPage(wizard
, "Page 1")
148 page2
= TitledPage(wizard
, "Page 2")
149 page3
= TitledPage(wizard
, "Page 3")
150 page4
= TitledPage(wizard
, "Page 4")
153 page1
.sizer
.Add(wx
.StaticText(page1
, -1, """
154 This wizard is totally useless, but is meant to show how to
155 chain simple wizard pages together in a non-dynamic manner.
156 IOW, the order of the pages never changes, and so the
157 wxWizardPageSimple class can easily be used for the pages."""))
158 wizard
.FitToPage(page1
)
159 page4
.sizer
.Add(wx
.StaticText(page4
, -1, "\nThis is the last page."))
161 # Use the convenience Chain function to connect the pages
162 wiz
.WizardPageSimple_Chain(page1
, page2
)
163 wiz
.WizardPageSimple_Chain(page2
, page3
)
164 wiz
.WizardPageSimple_Chain(page3
, page4
)
166 wizard
.GetPageAreaSizer().Add(page1
)
167 if wizard
.RunWizard(page1
):
168 wx
.MessageBox("Wizard completed successfully", "That's all folks!")
170 wx
.MessageBox("Wizard was cancelled", "That's all folks!")
174 def OnRunDynamicWizard(self
, evt
):
175 # Create the wizard and the pages
176 #wizard = wx.PreWizard()
177 #wizard.SetExtraStyle(wx.WIZARD_EX_HELPBUTTON)
178 #wizard.Create(self, self.ID_wiz, "Simple Wizard",
179 # images.getWizTest1Bitmap())
180 wizard
= wiz
.Wizard(self
, -1, "Simple Wizard", images
.getWizTest1Bitmap())
182 page1
= TitledPage(wizard
, "Page 1")
183 page2
= SkipNextPage(wizard
, "Page 2")
184 page3
= TitledPage(wizard
, "Page 3")
185 page4
= UseAltBitmapPage(wizard
, "Page 4")
186 page5
= TitledPage(wizard
, "Page 5")
189 page1
.sizer
.Add(wx
.StaticText(page1
, -1, """
190 This wizard shows the ability to choose at runtime the order
191 of the pages and also which bitmap is shown.
193 wizard
.FitToPage(page1
)
194 page5
.sizer
.Add(wx
.StaticText(page5
, -1, "\nThis is the last page."))
196 # Set the initial order of the pages
207 wizard
.GetPageAreaSizer().Add(page1
)
208 if wizard
.RunWizard(page1
):
209 wx
.MessageBox("Wizard completed successfully", "That's all folks!")
211 wx
.MessageBox("Wizard was cancelled", "That's all folks!")
213 #----------------------------------------------------------------------
215 def runTest(frame
, nb
, log
):
216 win
= TestPanel(nb
, log
)
219 #----------------------------------------------------------------------
223 overview
= """<html><body>
224 <h2><center>wxWizard</center></h2>
226 wxWizard is the central class for implementing 'wizard-like'
227 dialogs. These dialogs are mostly familiar to Windows users and are
228 nothing else but a sequence of 'pages' each of them displayed inside a
229 dialog which has the buttons to pass to the next (and previous) pages.
231 The wizards are typically used to decompose a complex dialog into
232 several simple steps and are mainly useful to the novice users, hence
233 it is important to keep them as simple as possible.
240 if __name__
== '__main__':
243 run
.main(['', os
.path
.basename(sys
.argv
[0])] + sys
.argv
[1:])