您的位置:首页 > 编程语言 > Python开发

wxPython入门练习代码 四

2016-09-01 22:54 399 查看
自定义Model文件abtractmodel.py:

class AbstractModel(object):

def __init__(self):
self.listeners = []

def addListener(self, listenerFunc):
self.listeners.append(listenerFunc)

def removeListener(self, listenerFunc):
self.listeners.remove(listenerFunc)

def update(self):
for eachFunc in self.listeners:
eachFunc(self)


实例调用MVC文件ModelExample.py:

#!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","Flintstones")

def OnBarney(self,event):
self.model.set("Barney","Rubble")

def OnWilma(self,event):
self.model.set("Wilma","Flintstones")

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


内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: