自定义Model文件abtractmodel.py:

 1 class AbstractModel(object):
 2 
 3     def __init__(self):
 4         self.listeners = []
 5 
 6     def addListener(self, listenerFunc):
 7         self.listeners.append(listenerFunc)
 8 
 9     def removeListener(self, listenerFunc):
10         self.listeners.remove(listenerFunc)
11 
12     def update(self):
13         for eachFunc in self.listeners:
14             eachFunc(self)

实例调用MVC文件ModelExample.py:

 1 #!usr/bin/env python
 2 
 3 import wx
 4 import abstractmodel
 5 
 6 
 7 class SimpleName(abstractmodel.AbstractModel):
 8     def __init__(self,first="",last=""):
 9         abstractmodel.AbstractModel.__init__(self)
10         self.set(first,last)
11         
12     def set(self,first,last):
13         self.first = first
14         self.last = last
15         self.update()
16         
17 class ModelExample(wx.Frame):
18     def __init__(self,parent,id):
19         wx.Frame.__init__(self,parent,id,'Flintstones',size=(340,200))
20         panel = wx.Panel(self)
21         panel.SetBackgroundColour("White")
22         self.Bind(wx.EVT_CLOSE,self.OnCloseWindow)
23         self.textFields = {}
24         self.createTextFields(panel)
25         self.model = SimpleName()
26         self.model.addListener(self.OnUpdate)
27         self.createButtonBar(panel)
28         
29     def buttonData(self):
30         return(("Fredify",self.OnFred),
31                 ("Wilmafy",self.OnWilma),
32                 ("Barnify",self.OnBarney),
33                 ("Bettify",self.OnBetty))
34                 
35     def createButtonBar(self,panel,yPos=0):
36         xPos=0
37         for eachLabel,eachHandler in self.buttonData():
38             pos = (xPos,yPos)
39             button =self.buildOneButton(panel,eachLabel,eachHandler,pos)
40             xPos += button.GetSize().width
41             
42     def buildOneButton(self,parent,label,handler,pos=(0,0)):
43         button = wx.Button(parent,-1,label,pos)
44         self.Bind(wx.EVT_BUTTON,handler,button)
45         return button
46         
47     def textFieldData(self):
48         return (("First Name",(10,50)),("Last Name",(10,80)))
49         
50     def createTextFields(self,panel):
51         for eachLabel,eachPos in self.textFieldData():
52             self.createCaptionedText(panel,eachLabel,eachPos)
53             
54     def createCaptionedText(self,panel,label,pos):
55         static = wx.StaticText(panel,wx.NewId(),label,pos)
56         static.SetBackgroundColour("White")
57         textPos = (pos[0]+75,pos[1])
58         self.textFields[label] = wx.TextCtrl(panel,wx.NewId(),
59                 "",size=(100,-1),pos=textPos,
60                 style=wx.TE_READONLY)
61                 
62     def OnUpdate(self,model):
63         self.textFields["First Name"].SetValue(model.first)
64         self.textFields["Last Name"].SetValue(model.last)
65     
66     def OnFred(self,event):
67         self.model.set("Fred","Flintstones")
68         
69     def OnBarney(self,event):
70         self.model.set("Barney","Rubble")
71         
72     def OnWilma(self,event):
73         self.model.set("Wilma","Flintstones")
74         
75     def OnBetty(self,event):
76         self.model.set("Betty","Rubble")
77         
78     def OnCloseWindow(self,event):
79         self.Destroy()
80         
81 if __name__ == '__main__':
82     app = wx.PySimpleApp()
83     frame = ModelExample(parent=None,id=-1)
84     frame.Show()
85     app.MainLoop()
86     

 

posted on 2016-09-01 22:54  浪迹枫叶  阅读(555)  评论(0编辑  收藏  举报