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()