wxPython入门练习代码 四
自定义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()
wxPython入门练习代码 四的更多相关文章
- wxPython入门练习代码 二
WxPython书籍[摘记] 1.任何wxPython应用程序都需要一个应用程序对象.这个应用程序对象必须是类wx.App或其定制的子类的一个实例.2.在OnInit()方法中将至少创建一个框架对象, ...
- wxPython入门练习代码 一
Bare.py: #1.导入必须的wxPython包 import wx #2.子类化wx应用程序类 class App(wx.App): #3.定义应用程序初始化方法 def OnInit(self ...
- wxPython入门练习代码 三
DoubleEventFrame.py: #!/usr/bin/env/ python import wx class DoubleEventFrame(wx.Frame): def __init__ ...
- WCF入门教程(四)通过Host代码方式来承载服务
WCF入门教程(四)通过Host代码方式来承载服务 之前已经讲过WCF对外发布服务的具体方式. WCF入门教程(一)简介 Host承载,可以是web,也可以是控制台程序等等.比WebService有更 ...
- WCF入门教程(四)通过Host代码方式来承载服务 一个WCF使用TCP协议进行通协的例子 jquery ajax调用WCF,采用System.ServiceModel.WebHttpBinding System.ServiceModel.WSHttpBinding协议 学习WCF笔记之二 无废话WCF入门教程一[什么是WCF]
WCF入门教程(四)通过Host代码方式来承载服务 Posted on 2014-05-15 13:03 停留的风 阅读(7681) 评论(0) 编辑 收藏 WCF入门教程(四)通过Host代码方式来 ...
- 无废话ExtJs 入门教程十四[文本编辑器:Editor]
无废话ExtJs 入门教程十四[文本编辑器:Editor] extjs技术交流,欢迎加群(201926085) ExtJs自带的编辑器没有图片上传的功能,大部分时候能够满足我们的需要. 但有时候这个功 ...
- 【知识整理】这可能是最好的RxJava 2.x 入门教程(四)
这可能是最好的RxJava 2.x入门教程系列专栏 文章链接: 这可能是最好的RxJava 2.x 入门教程(一) 这可能是最好的RxJava 2.x 入门教程(二) 这可能是最好的RxJava 2. ...
- Wxpython入门
Wxpython入门 api文档以及中文教程: https://pan.baidu.com/s/1TDTgHg9Mwc74ODQy68YnlQ 提取码:354n 入门示例 frame=wx.Frame ...
- MyBatis基础入门《十四》ResultMap子元素(association )
MyBatis基础入门<十四>ResultMap子元素(association ) 1. id: >> 一般对应数据库中改行的主键ID,设置此项可以提高Mybatis的性能 2 ...
随机推荐
- Swift 语法
三目运算 let p=10 let x:Int? = 12 let m:Optional = 11 print(x!+p+m!) ...
- strom的使用02
1.grouping分组策略 stream grouping就是用来定义一个stream应该如果分配给Bolts上面的多个Tasks. storm里面有6种类型的stream grouping: 1. ...
- 通知Notification
步骤: 1.调用getSystemService()获取NotificationManager:NotificationManager manager = (NotificationManager)g ...
- Apache配置文件讲解
持续作用扩展自 HTTP/1.0 和 HTTP/1.1 的长连接特性.提供了长效的 HTTP 会话,用以在同 一个 TCP 连接中进行多次请求. 在某些情况下, 这样的方式会对包含大量图片的 ...
- Nexpose下载安装注册一条龙
附上两个下载链接: Windows版本(64bit) : http://download2.rapid7.com/download/NeXpose-v4/NeXposeSetup-Windows64. ...
- My first python script for work
I write it yesterday to watch the NE process(rcpfd,cfgd) automatically, then i will write a window t ...
- 中国天气网放回json的解释
本文是出自David_Tang的,原文http://www.cnblogs.com/mchina/archive/2013/07/12/3170551.html {"weatherinfo& ...
- Log4net(1):配置的简单说明
基础代码下载地址:https://github.com/zhangsai521314/StudyLog4net 1:按日期分隔日志 <configSections> <section ...
- Asp.Net完美隐藏服务器信息
首先在Global.asax.cs里增加: protected void Application_PreSendRequestContent(object sender, EventArgs e){H ...
- String.getBytes()
package entity; import java.io.UnsupportedEncodingException; public class Test { public static void ...