]> git.saurik.com Git - wxWidgets.git/blame - wxPython/demo/Dialog.py
moved fatal exception handling code to msw/main.cpp from common code
[wxWidgets.git] / wxPython / demo / Dialog.py
CommitLineData
cf694132 1
8fa876ca 2import wx
cf694132
RD
3
4#---------------------------------------------------------------------------
1e4a197e
RD
5# Create and set a help provider. Normally you would do this in
6# the app's OnInit as it must be done before any SetHelpText calls.
8fa876ca
RD
7provider = wx.SimpleHelpProvider()
8wx.HelpProvider_Set(provider)
031787de 9
1e4a197e
RD
10#---------------------------------------------------------------------------
11
8fa876ca
RD
12class TestDialog(wx.Dialog):
13 def __init__(
14 self, parent, ID, title, size=wx.DefaultSize, pos=wx.DefaultPosition,
15 style=wx.DEFAULT_DIALOG_STYLE
16 ):
1e4a197e 17
95bfd958 18 # Instead of calling wx.Dialog.__init__ we precreate the dialog
8fa876ca 19 # so we can set an extra style that must be set before
1e4a197e
RD
20 # creation, and then we create the GUI dialog using the Create
21 # method.
8fa876ca
RD
22 pre = wx.PreDialog()
23 pre.SetExtraStyle(wx.DIALOG_EX_CONTEXTHELP)
1e4a197e
RD
24 pre.Create(parent, ID, title, pos, size, style)
25
26 # This next step is the most important, it turns this Python
27 # object into the real wrapper of the dialog (instead of pre)
28 # as far as the wxPython extension is concerned.
56b98bac 29 self.PostCreate(pre)
1e4a197e
RD
30
31 # Now continue with the normal construction of the dialog
32 # contents
8fa876ca 33 sizer = wx.BoxSizer(wx.VERTICAL)
1e4a197e 34
95bfd958 35 label = wx.StaticText(self, -1, "This is a wx.Dialog")
1e4a197e 36 label.SetHelpText("This is the help text for the label")
8fa876ca 37 sizer.Add(label, 0, wx.ALIGN_CENTRE|wx.ALL, 5)
1e4a197e 38
8fa876ca 39 box = wx.BoxSizer(wx.HORIZONTAL)
1e4a197e 40
8fa876ca 41 label = wx.StaticText(self, -1, "Field #1:")
1e4a197e 42 label.SetHelpText("This is the help text for the label")
8fa876ca 43 box.Add(label, 0, wx.ALIGN_CENTRE|wx.ALL, 5)
031787de 44
8fa876ca 45 text = wx.TextCtrl(self, -1, "", size=(80,-1))
1e4a197e 46 text.SetHelpText("Here's some help text for field #1")
8fa876ca 47 box.Add(text, 1, wx.ALIGN_CENTRE|wx.ALL, 5)
031787de 48
ab5b7b61 49 sizer.Add(box, 0, wx.GROW|wx.ALIGN_CENTER_VERTICAL|wx.ALL, 5)
031787de 50
8fa876ca 51 box = wx.BoxSizer(wx.HORIZONTAL)
031787de 52
8fa876ca 53 label = wx.StaticText(self, -1, "Field #2:")
1e4a197e 54 label.SetHelpText("This is the help text for the label")
8fa876ca 55 box.Add(label, 0, wx.ALIGN_CENTRE|wx.ALL, 5)
031787de 56
8fa876ca 57 text = wx.TextCtrl(self, -1, "", size=(80,-1))
1e4a197e 58 text.SetHelpText("Here's some help text for field #2")
8fa876ca 59 box.Add(text, 1, wx.ALIGN_CENTRE|wx.ALL, 5)
031787de 60
ab5b7b61 61 sizer.Add(box, 0, wx.GROW|wx.ALIGN_CENTER_VERTICAL|wx.ALL, 5)
031787de 62
8fa876ca
RD
63 line = wx.StaticLine(self, -1, size=(20,-1), style=wx.LI_HORIZONTAL)
64 sizer.Add(line, 0, wx.GROW|wx.ALIGN_CENTER_VERTICAL|wx.RIGHT|wx.TOP, 5)
031787de 65
8fa876ca 66 box = wx.BoxSizer(wx.HORIZONTAL)
031787de 67
8fa876ca
RD
68 if wx.Platform != "__WXMSW__":
69 btn = wx.ContextHelpButton(self)
70 box.Add(btn, 0, wx.ALIGN_CENTRE|wx.ALL, 5)
031787de 71
8fa876ca 72 btn = wx.Button(self, wx.ID_OK, " OK ")
1e4a197e
RD
73 btn.SetDefault()
74 btn.SetHelpText("The OK button completes the dialog")
8fa876ca 75 box.Add(btn, 0, wx.ALIGN_CENTRE|wx.ALL, 5)
031787de 76
8fa876ca
RD
77 btn = wx.Button(self, wx.ID_CANCEL, " Cancel ")
78 btn.SetHelpText("The Cancel button cnacels the dialog. (Cool, huh?)")
79 box.Add(btn, 0, wx.ALIGN_CENTRE|wx.ALL, 5)
031787de 80
8fa876ca 81 sizer.Add(box, 0, wx.ALIGN_CENTER_VERTICAL|wx.ALL, 5)
031787de 82
1e4a197e
RD
83 self.SetSizer(sizer)
84 self.SetAutoLayout(True)
85 sizer.Fit(self)
031787de 86
1e4a197e
RD
87#---------------------------------------------------------------------------
88
34a544a6
RD
89class TestPanel(wx.Panel):
90 def __init__(self, parent, log):
91 self.log = log
92 wx.Panel.__init__(self, parent, -1)
93
94 b = wx.Button(self, -1, "Create and Show a custom Dialog", (50,50))
95 self.Bind(wx.EVT_BUTTON, self.OnButton, b)
96
97
98 def OnButton(self, evt):
99 dlg = TestDialog(self, -1, "This is a Dialog", size=(350, 200),
100 #style = wxCAPTION | wxSYSTEM_MENU | wxTHICK_FRAME
101 style = wx.DEFAULT_DIALOG_STYLE
102 )
103 dlg.CenterOnScreen()
104
105 # this does not return until the dialog is closed.
106 val = dlg.ShowModal()
8fa876ca 107
34a544a6
RD
108 if val == wx.ID_OK:
109 self.log.WriteText("You pressed OK\n")
110 else:
111 self.log.WriteText("You pressed Cancel\n")
8fa876ca 112
34a544a6
RD
113 dlg.Destroy()
114
cf694132 115
34a544a6
RD
116#---------------------------------------------------------------------------
117
118
119def runTest(frame, nb, log):
120 win = TestPanel(nb, log)
121 return win
cf694132 122
cf694132 123
8fa876ca 124#---------------------------------------------------------------------------
cf694132
RD
125
126
8fa876ca
RD
127overview = """\
128wxPython offers quite a few general purpose dialogs for useful data input from
129the user; they are all based on the wx.Dialog class, which you can also subclass
130to create custom dialogs to suit your needs.
cf694132 131
8fa876ca
RD
132The Dialog class, in addition to dialog-like behaviors, also supports the full
133wxWindows layout featureset, which means that you can incorporate sizers or
134layout constraints as needed to achieve the look and feel desired. It even supports
135context-sensitive help, which is illustrated in this example.
cf694132 136
8fa876ca
RD
137The example is very simple; in real world situations, a dialog that had input
138fields such as this would no doubt be required to deliver those values back to
139the calling function. The Dialog class supports data retrieval in this manner.
140<b>However, the data must be retrieved prior to the dialog being destroyed.</b>
141The example shown here is <i>modal</i>; non-modal dialogs are possible as well.
cf694132 142
8fa876ca 143See the documentation for the <code>Dialog</code> class for more details.
cf694132 144
8fa876ca 145"""
cf694132 146
1e4a197e
RD
147if __name__ == '__main__':
148 import sys,os
149 import run
8eca4fef 150 run.main(['', os.path.basename(sys.argv[0])] + sys.argv[1:])
cf694132 151