wxpython 与 mvc
来源:互联网 发布:足球阵型软件 编辑:程序博客网 时间:2024/05/17 22:45
简介
本文介绍的是MVC模式和如何在python中实现。
MVC
mvc的变体
主题
MVC是用来分离关注点的。
Model负责管理程序的数据模型。View/Controller负责向外界提供与客户端数据交互的方法。
Model提供了供程序其他部分与它交互的API。View/Controller提供了一个外部界面(GUI/CLI/Web form/ high-level IPC/etc),使程序外的与之沟通。
Model不包含任何view/controller代码:没有gui 控件的类,没有布局,没有接收任何用户的输入。
MVC程序的本质上,就算没有View/Controll的代码,也应该是完整的,虽然操纵它变得困难。但是只要我们知道Model的API,这个程序将正常的操作数据。
Model不应该知道view/controller的任何东西, View/Controller允许知道Model的一部分(特别是,Model的API)。
why? 因为MVC是穿建一个明确的关注点分离。
例子
wxpython
#!/usr/bin/env pythonimport wx# an observable calls callback functions when the data has changed#o = Observable()# def func(data):# print "hello", data# o.addCallback(func)# o.set(1)# --| "hello", 1class Observable: def __init__(self, initialValue=None): self.data = initialValue self.callbacks = {} def addCallback(self, func): self.callbacks[func] = 1 def delCallback(self, func): del self.callback[func] def _docallbacks(self): for func in self.callbacks: func(self.data) def set(self, data): self.data = data self._docallbacks() def get(self): return self.data def unset(self): self.data = Noneclass Model: def __init__(self): self.myMoney = Observable(0) def addMoney(self, value): self.myMoney.set(self.myMoney.get() + value) def removeMoney(self, value): self.myMoney.set(self.myMoney.get() - value)class View(wx.Frame): def __init__(self, parent): wx.Frame.__init__(self, parent, title="Main View") sizer = wx.BoxSizer(wx.VERTICAL) text = wx.StaticText(self, label="My Money") ctrl = wx.TextCtrl(self) sizer.Add(text, 0, wx.EXPAND | wx.ALL) sizer.Add(ctrl, 0, wx.EXPAND | wx.ALL) ctrl.SetEditable(False) self.SetSizer(sizer) self.moneyCtrl = ctrl def SetMoney(self, money): self.moneyCtrl.SetValue(str(money))class ChangerWidget(wx.Frame): def __init__(self, parent): wx.Frame.__init__(self, parent, title="Main View") sizer = wx.BoxSizer(wx.VERTICAL) self.add = wx.Button(self, label="Add Money") self.remove = wx.Button(self, label="Remove Money") sizer.Add(self.add, 0, wx.EXPAND | wx.ALL) sizer.Add(self.remove, 0, wx.EXPAND | wx.ALL) self.SetSizer(sizer)class Controller: def __init__(self, app): self.model = Model() self.view1 = View(None) self.view2 = ChangerWidget(self.view1) self.MoneyChanged(self.model.myMoney.get()) self.view2.add.Bind(wx.EVT_BUTTON, self.AddMoney) self.view2.remove.Bind(wx.EVT_BUTTON, self.RemoveMoney) self.model.myMoney.addCallback(self.MoneyChanged) self.view1.Show() self.view2.Show() def AddMoney(self, evt): self.model.addMoney(10) def RemoveMoney(self, evt): self.model.removeMoney(10) def MoneyChanged(self, money): self.view1.SetMoney(money)app = wx.App(False)controller = Controller(app)app.MainLoop()
引用
wxpython MVC
0 0
- wxpython 与 mvc
- wxPython MVC 数据库小demo
- wxPython菜单与工具栏
- wxPython菜单与工具栏
- wxPython安装与GUI
- wxPython的安装与使用
- pip与wxpython的安装
- wxPython
- wxPython
- wxPython
- wxpython
- wxPython
- wxpython
- import wx 与from wxPython.wx import *
- wxPython与pyQt集成的小案例
- wxPython常用的文件与文件夹操作
- wxPython菜单与工具栏基础示例
- windows下wxPython开发环境安装与配置
- ubuntu系统怎么禁用访客账户
- yii框架生成表单所有框
- 用Jquery动态append方式加入标签时Css样式丢失的解决方法
- 编写一个函数,删除一个字符串中的子串
- Android默认打开USB adb调试
- wxpython 与 mvc
- echarts使用e_macarons方法
- VisualStudio中的调试命令参数中%的转义问题
- Redis内存分配策略
- IOS 微信获取accesstoken 40029
- 1070.Mooncake (25)
- Android主界面实现方式
- PHP保存base64格式的图片内容为图片文件
- 2.9