--- /dev/null
+
+
+from wxPython.wx import *
+
+class FieldData:
+ def __init__(self, name, label, shortHelp="", defValue="",
+ size=(-1, -1), style=0, ID=-1):
+ self.name = name
+ self.label = label
+ self.shortHelp = shortHelp
+ self.defValue = defValue
+ self.size = size
+ self.style = style
+ self.ID = ID
+
+
+class DynamicForm(wxPanel):
+ def __init__(self, parent, ID, fieldData):
+ wxPanel.__init__(self, parent, ID)
+
+ sizer = wxFlexGridSizer(cols=2, vgap=5, hgap=5)
+ for field in fieldData:
+ label = wxStaticText(self, -1, field.label)
+ sizer.Add(label, 0, wxALIGN_RIGHT)
+ text = wxTextCtrl(self, field.ID, field.defValue,
+ size=field.size, style=field.style)
+ if field.shortHelp:
+ text.SetToolTip(wxToolTip(field.shortHelp))
+ self.__dict__["get_"+field.name] = text.GetValue
+ self.__dict__["set_"+field.name] = text.SetValue
+ sizer.Add(text, 0, wxEXPAND)
+
+ sizer.Fit(self)
+ self.SetAutoLayout(true)
+ self.SetSizer(sizer)
+
+
+class TestFrame(wxFrame):
+ testFields = [
+ FieldData("fname", "First name:", "Enter someone's first name"),
+ FieldData("lname", "Last name:", "Enter someone's last name"),
+ FieldData("email", "Email address:", "just figure it out..."),
+ ]
+ def __init__(self):
+ wxFrame.__init__(self, None, -1, "This is a test")
+ form = DynamicForm(self, -1, self.testFields)
+ form.set_fname("Robin")
+ form.set_lname("Dunn")
+ self.form = form
+ self.Fit()
+ EVT_CLOSE(self, self.OnCloseWindow)
+
+ def OnCloseWindow(self, evt):
+ print self.form.get_email()
+ self.Destroy()
+
+
+app = wxPySimpleApp()
+frame = TestFrame()
+frame.Show(true)
+app.MainLoop()
+