Frames and Dialogs→ Dialog
overview = """\
wxPython offers quite a few general purpose dialogs for useful data input from
the user; they are all based on the wx.Dialog class, which you can also subclass
to create custom dialogs to suit your needs.
The Dialog class, in addition to dialog-like behaviors, also supports the full
wxWindows layout featureset, which means that you can incorporate sizers or
layout constraints as needed to achieve the look and feel desired. It even supports
context-sensitive help, which is illustrated in this example.
The example is very simple; in real world situations, a dialog that had input
fields such as this would no doubt be required to deliver those values back to
the calling function. The Dialog class supports data retrieval in this manner.
However, the data must be retrieved prior to the dialog being destroyed.
The example shown here is modal; non-modal dialogs are possible as well.
See the documentation for the Dialog class for more details.
"""
import wx
class Dialog(wx.Dialog):
def __init__(
self, parent, id=-1, title='Dialog', size=wx.DefaultSize, pos=wx.DefaultPosition,
style=wx.DEFAULT_DIALOG_STYLE,
useMetal=False
):
pre = wx.PreDialog()
pre.SetExtraStyle(wx.DIALOG_EX_CONTEXTHELP)
pre.Create(parent, id, title, pos, size, style)
self.PostCreate(pre)
sizer = wx.BoxSizer(wx.VERTICAL)
label = wx.StaticText(self, -1, "This is a wx.Dialog")
label.SetHelpText("This is the help text for the label")
sizer.Add(label, 0, wx.ALIGN_CENTRE | wx.ALL, 5)
box = wx.BoxSizer(wx.HORIZONTAL)
label = wx.StaticText(self, -1, "Field #1: ")
label.SetHelpText("This is the help text for the label")
box.Add(label, 0, wx.ALIGN_CENTRE | wx.ALL, 5)
text = wx.TextCtrl(self, -1, "", size=(80, -1))
text.SetHelpText("This is some help for field #1")
box.Add(text, 1, wx.ALIGN_CENTRE | wx.ALL, 5)
sizer.Add(box, 0, wx.GROW|wx.ALIGN_CENTER_VERTICAL|wx.ALL, 5)
box = wx.BoxSizer(wx.HORIZONTAL)
label = wx.StaticText(self, -1, "Field #2: ")
label.SetHelpText("This is the help text for the label")
box.Add(label, 0, wx.ALIGN_CENTRE | wx.ALL, 5)
text = wx.TextCtrl(self, -1, "", size=(80, -1))
text.SetHelpText("This is some help for field #2")
box.Add(text, 0, wx.ALIGN_CENTRE | wx.ALL, 5)
sizer.Add(box, 0, wx.GROW | wx.ALIGN_CENTER_VERTICAL | wx.ALL, 5)
line = wx.StaticLine(self, -1, size=(20, -1), style=wx.LI_HORIZONTAL)
sizer.Add(line, 0, wx.GROW|wx.ALIGN_CENTER_VERTICAL|wx.RIGHT|wx.TOP, 5)
btnsizer = wx.StdDialogButtonSizer()
button = wx.Button(self, wx.ID_OK)
button.SetHelpText("The OK button completes the dialog")
button.SetDefault()
btnsizer.AddButton(button)
button = wx.Button(self, wx.ID_CANCEL)
button.SetHelpText("The Cancel button cancels the dialog. (cool huh?)")
btnsizer.AddButton(button)
btnsizer.Realize()
sizer.Add(btnsizer, 0, wx.ALIGN_CENTER_VERTICAL|wx.ALL, 5)
self.SetSizer(sizer)
sizer.Fit(self)
def TestDialog():
app = wx.PySimpleApp()
dlg = Dialog(parent=None)
dlg.CentreOnScreen()
dlg.ShowModal()
app.MainLoop()
if __name__ == "__main__":
TestDialog()