63 lines
1.8 KiB
Python
63 lines
1.8 KiB
Python
|
|
||
|
|
||
|
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()
|
||
|
|