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 ...
随机推荐
- Cheatsheet: 2016 06.01 ~ 6.30
Other Swift for the Java guy: Part 1 – Getting Started Building a better code review process Creatin ...
- Java方法trim()小记
我们一般用trim()方法的主要作用,是为了去除字符串的首尾空格.然而根据我个人的实践经验发现,trim()这个方法只能去除部分的空格或空白符,比如半角空格:对于全角空格的话,用trim()并不能去除 ...
- python走起之第十三话
前景介绍 到目前为止,很多公司对堡垒机依然不太感冒,其实是没有充分认识到堡垒机在IT管理中的重要作用的,很多人觉得,堡垒机就是跳板机,其实这个认识是不全面的,跳板功能只是堡垒机所具备的功能属性中的其中 ...
- [git] git代理及常用命令,远程桌面代理
1.代理 公司只能内网,上外网只能用代理,坑货! 2. 更新代码命令 1)下载代码:git clone ------------ 2) 指定目录: cd 文件名 3)git add ...
- Bluetooth Low Energy 嗅探
Bluetooth Low Energy 嗅探 路人甲 · 2015/10/16 10:52 0x00 前言 如果你打开这篇文章时期望看到一些新的东西,那么很抱歉这篇文章不是你在找的那篇文章.因为严格 ...
- 利用SSH传输文件
在linux下一般用scp这个命令来通过ssh传输文件. 1.从服务器上下载文件scp username@servername:/path/filename /var/www/local_dir(本地 ...
- checkbox选中 和是否选中
<input type="checkbox" <%--value="1"--%> id="checkboxOneInput" ...
- Android 6.0权限改变
对于6.0以下的权限及在安装的时候,根据权限声明产生一个权限列表,用户只有在同意之后才能完成app的安装,造成了我们想要使用某个app,就要默默忍受其一些不必要的权限(比如是个app都要访问通讯录.短 ...
- 使用JDBC获取Oracle连接时报错
The Network Adapter could not establish the connection 网络适配器不能创建连接 作为初学者的来说,这个问题让我找了好多次,每次重新开启 ...
- Ajax聊天
结构: index.html <!DOCTYPE html> <html> <head> <title>index.html</title> ...