git-svn-id: https://svn.wxwidgets.org/svn/wx/wxWidgets/trunk@33736 c3d73ce0-8a6f-49c7-b76d-6d57e0e08775
		
			
				
	
	
		
			152 lines
		
	
	
		
			5.3 KiB
		
	
	
	
		
			Python
		
	
	
	
	
	
			
		
		
	
	
			152 lines
		
	
	
		
			5.3 KiB
		
	
	
	
		
			Python
		
	
	
	
	
	
 | 
						|
import  wx
 | 
						|
 | 
						|
#---------------------------------------------------------------------------
 | 
						|
# Create and set a help provider.  Normally you would do this in
 | 
						|
# the app's OnInit as it must be done before any SetHelpText calls.
 | 
						|
provider = wx.SimpleHelpProvider()
 | 
						|
wx.HelpProvider_Set(provider)
 | 
						|
 | 
						|
#---------------------------------------------------------------------------
 | 
						|
 | 
						|
class TestDialog(wx.Dialog):
 | 
						|
    def __init__(
 | 
						|
            self, parent, ID, title, size=wx.DefaultSize, pos=wx.DefaultPosition, 
 | 
						|
            style=wx.DEFAULT_DIALOG_STYLE
 | 
						|
            ):
 | 
						|
 | 
						|
        # Instead of calling wx.Dialog.__init__ we precreate the dialog
 | 
						|
        # so we can set an extra style that must be set before
 | 
						|
        # creation, and then we create the GUI dialog using the Create
 | 
						|
        # method.
 | 
						|
        pre = wx.PreDialog()
 | 
						|
        pre.SetExtraStyle(wx.DIALOG_EX_CONTEXTHELP)
 | 
						|
        pre.Create(parent, ID, title, pos, size, style)
 | 
						|
 | 
						|
        # This next step is the most important, it turns this Python
 | 
						|
        # object into the real wrapper of the dialog (instead of pre)
 | 
						|
        # as far as the wxPython extension is concerned.
 | 
						|
        self.PostCreate(pre)
 | 
						|
 | 
						|
        # Now continue with the normal construction of the dialog
 | 
						|
        # contents
 | 
						|
        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("Here's some help text 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("Here's some help text for field #2")
 | 
						|
        box.Add(text, 1, 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()
 | 
						|
        
 | 
						|
        if wx.Platform != "__WXMSW__":
 | 
						|
            btn = wx.ContextHelpButton(self)
 | 
						|
            btnsizer.AddButton(btn)
 | 
						|
        
 | 
						|
        btn = wx.Button(self, wx.ID_OK)
 | 
						|
        btn.SetHelpText("The OK button completes the dialog")
 | 
						|
        btn.SetDefault()
 | 
						|
        btnsizer.AddButton(btn)
 | 
						|
 | 
						|
        btn = wx.Button(self, wx.ID_CANCEL)
 | 
						|
        btn.SetHelpText("The Cancel button cnacels the dialog. (Cool, huh?)")
 | 
						|
        btnsizer.AddButton(btn)
 | 
						|
        btnsizer.Realize()
 | 
						|
 | 
						|
        sizer.Add(btnsizer, 0, wx.ALIGN_CENTER_VERTICAL|wx.ALL, 5)
 | 
						|
 | 
						|
        self.SetSizer(sizer)
 | 
						|
        sizer.Fit(self)
 | 
						|
 | 
						|
#---------------------------------------------------------------------------
 | 
						|
 | 
						|
class TestPanel(wx.Panel):
 | 
						|
    def __init__(self, parent, log):
 | 
						|
        self.log = log
 | 
						|
        wx.Panel.__init__(self, parent, -1)
 | 
						|
 | 
						|
        b = wx.Button(self, -1, "Create and Show a custom Dialog", (50,50))
 | 
						|
        self.Bind(wx.EVT_BUTTON, self.OnButton, b)
 | 
						|
 | 
						|
 | 
						|
    def OnButton(self, evt):
 | 
						|
        dlg = TestDialog(self, -1, "This is a Dialog", size=(350, 200),
 | 
						|
                         #style = wxCAPTION | wxSYSTEM_MENU | wxTHICK_FRAME
 | 
						|
                         style = wx.DEFAULT_DIALOG_STYLE
 | 
						|
                         )
 | 
						|
        dlg.CenterOnScreen()
 | 
						|
 | 
						|
        # this does not return until the dialog is closed.
 | 
						|
        val = dlg.ShowModal()
 | 
						|
    
 | 
						|
        if val == wx.ID_OK:
 | 
						|
            self.log.WriteText("You pressed OK\n")
 | 
						|
        else:
 | 
						|
            self.log.WriteText("You pressed Cancel\n")
 | 
						|
 | 
						|
        dlg.Destroy()
 | 
						|
        
 | 
						|
 | 
						|
#---------------------------------------------------------------------------
 | 
						|
 | 
						|
 | 
						|
def runTest(frame, nb, log):
 | 
						|
    win = TestPanel(nb, log)
 | 
						|
    return win
 | 
						|
 | 
						|
 | 
						|
#---------------------------------------------------------------------------
 | 
						|
 | 
						|
 | 
						|
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.
 | 
						|
<b>However, the data must be retrieved prior to the dialog being destroyed.</b>
 | 
						|
The example shown here is <i>modal</i>; non-modal dialogs are possible as well.
 | 
						|
 | 
						|
See the documentation for the <code>Dialog</code> class for more details.
 | 
						|
 | 
						|
"""
 | 
						|
 | 
						|
if __name__ == '__main__':
 | 
						|
    import sys,os
 | 
						|
    import run
 | 
						|
    run.main(['', os.path.basename(sys.argv[0])] + sys.argv[1:])
 | 
						|
 |