--- /dev/null
+#!/usr/bin/env python
+
+import wx
+import abstractmodel
+
+class SimpleName(abstractmodel.AbstractModel):
+
+ def __init__(self, first="", last=""):
+ abstractmodel.AbstractModel.__init__(self)
+ self.set(first, last)
+
+ def set(self, first, last):
+ self.first = first
+ self.last = last
+ self.update()
+
+class ModelExample(wx.Frame):
+
+ def __init__(self, parent, id):
+ wx.Frame.__init__(self, parent, id, 'Flintstones',
+ size=(340, 200))
+ panel = wx.Panel(self)
+ panel.SetBackgroundColour("White")
+ self.Bind(wx.EVT_CLOSE, self.OnCloseWindow)
+ self.textFields = {}
+ self.createTextFields(panel)
+ self.model = SimpleName()
+ self.model.addListener(self.OnUpdate)
+ self.createButtonBar(panel)
+
+ def buttonData(self):
+ return (("Fredify", self.OnFred),
+ ("Wilmafy", self.OnWilma),
+ ("Barnify", self.OnBarney),
+ ("Bettify", self.OnBetty))
+
+ def createButtonBar(self, panel, yPos = 0):
+ xPos = 0
+ for eachLabel, eachHandler in self.buttonData():
+ pos = (xPos, yPos)
+ button = self.buildOneButton(panel, eachLabel, eachHandler, pos)
+ xPos += button.GetSize().width
+
+ def buildOneButton(self, parent, label, handler, pos=(0,0)):
+ button = wx.Button(parent, -1, label, pos)
+ self.Bind(wx.EVT_BUTTON, handler, button)
+ return button
+
+ def textFieldData(self):
+ return (("First Name", (10, 50)),
+ ("Last Name", (10, 80)))
+
+ def createTextFields(self, panel):
+ for eachLabel, eachPos in self.textFieldData():
+ self.createCaptionedText(panel, eachLabel, eachPos)
+
+ def createCaptionedText(self, panel, label, pos):
+ static = wx.StaticText(panel, wx.NewId(), label, pos)
+ static.SetBackgroundColour("White")
+ textPos = (pos[0] + 75, pos[1])
+ self.textFields[label] = wx.TextCtrl(panel, wx.NewId(),
+ "", size=(100, -1), pos=textPos,
+ style=wx.TE_READONLY)
+
+ def OnUpdate(self, model):
+ self.textFields["First Name"].SetValue(model.first)
+ self.textFields["Last Name"].SetValue(model.last)
+
+ def OnFred(self, event):
+ self.model.set("Fred", "Flintstone")
+
+ def OnBarney(self, event):
+ self.model.set("Barney", "Rubble")
+
+ def OnWilma(self, event):
+ self.model.set("Wilma", "Flintstone")
+
+ def OnBetty(self, event):
+ self.model.set("Betty", "Rubble")
+
+ def OnCloseWindow(self, event):
+ self.Destroy()
+
+if __name__ == '__main__':
+ app = wx.PySimpleApp()
+ frame = ModelExample(parent=None, id=-1)
+ frame.Show()
+ app.MainLoop()
+