科学计算三维可视化---Traits属性的监听
Traits属性的监听
HasTraits对象所有Traits属性都自动支持监听功能,当每个Traits属性发生变化时,HasTraits对象会通知监听此属性的函数
两种监听模式
静态监听
动态监听
from traits.api import HasTraits,Int,Str class Child(HasTraits):
name = Str
age = Int
doing = Str
def __str__(self):
return "%s<%x>"%(self.name,id(self))
#静态监听age属性的变化
def _age_changed(self,old,new):
print("%s.age change: from %s to %s"%(self,old,new)) # 静态监听任何Trait属性的变化
def _anytrait_changed(self, name, old, new):
print("anytrait change:%s.%s from %s to %s" % (self,name, old, new)) #用于动态监测属性变化
def log_trait_changed(obj,name,old,new):
print("log: %s.%s change: from %s to %s" % (obj, name, old, new))
z = Child(name="ZhangSan",age=)
l = Child(name="Lisi",age=)
#动态监听doing属性的变化
z.on_trait_change(log_trait_changed,name="doing")
anytrait change:<a2f1360>.age from to 4 #先监听所有
<a2f1360>.age change: from to 4 #再监听自定义
anytrait change:ZhangSan<a2f1360>.name from to ZhangSan
anytrait change:<a2f13b8>.age from to
<a2f13b8>.age change: from to
anytrait change:Lisi<a2f13b8>.name from to Lisi
上面是静态监听,下面看动态监听:(都会调用_anytrait_changed,再根据我们定义的监听方法选择)
>>> z.age = 5 #静态监听
anytrait change:ZhangSan<a2f1360>.age from to
ZhangSan<a2f1360>.age change: from to
>>> z.doing = "playing" #动态监听
anytrait change:ZhangSan<a2f1360>.doing from to playing
log: ZhangSan<a2f1360>.doing change: from to playing
>>> l.doing = "see" #由于没有设置关联的监听方法,所以只会调用_anytrait_changed
anytrait change:Lisi<a2f13b8>.doing from to see
将一个Traits变量绑定静态动态监听后的顺序(先执行_anytrait_changed,后静态,再动态)
>>> z.on_trait_change(log_trait_changed,name="age")
>>> z.age =
anytrait change:ZhangSan<a2f1360>.age from to
ZhangSan<a2f1360>.age change: from to
log: ZhangSan<a2f1360>.age change: from to


当我们相对多个Traits属性都使用同一个监听函数时:
我们可以使用一种修饰函数@on_trait_change(names) #names可以是字符串或者列表,表示一串traits信息

实现on_trait_change方法使用
class Child(HasTraits):
name = Str
age = Int
doing = Str
def __str__(self):
return "%s<%x>"%(self.name,id(self))
#静态监听age属性的变化
def _age_changed(self,old,new):
print("%s.age change: from %s to %s"%(self,old,new)) @on_trait_change(["name","age"]) #注意列表中是字符串
def age_and_name_changed(self,name,old,new):
print("custom change:%s.%s from %s to %s" % (self,name, old, new)) # 静态监听任何Trait属性的变化
def _anytrait_changed(self, name, old, new):
print("anytrait change:%s.%s from %s to %s" % (self,name, old, new))
修改某一变量:查看执行顺序
z = Child(name="ZhangSan",age=)
# l = Child(name="Lisi",age=)
# #动态监听doing属性的变化
z.on_trait_change(log_trait_changed,name="age")
z.age = 10
anytrait change:ZhangSan<a64eb48>.age from to 10 #先是_anytrait_changed
ZhangSan<a64eb48>.age change: from to 10 #然后是静态
custom change:ZhangSan<a64eb48>.ZhangSan<a64eb48> from age to 10 #再自定义
log: ZhangSan<a64eb48>.age change: from to 10 #最后是动态
科学计算三维可视化---Traits属性的监听的更多相关文章
- 科学计算三维可视化---Traits属性的功能
Traits属性的功能 Traits库为python的属性增加了类型定义的功能,除此之外他还提供了5个特殊的功能(可以为用户的界面响应提供基本能力):初始化:每个traits属性都有自己的默认值验证: ...
- 科学计算三维可视化---Traits(Property属性)
Property属性 使用Property函数为类创建Property属性,Property属性用法和一般属性相同,但是他在获取值和赋值时会调用相应的方法 traits库也提供了Property属性 ...
- 科学计算三维可视化---Traits(Event和button属性)
Event和button属性 是两个专门用于处理事件的change属性 Event属性和其他Trait属性不一样 Button属性是由Event属性继承而来的 Event监听 from traits. ...
- 科学计算三维可视化---Traits介绍
简介 Traits是开源扩展库,Traits本身与科学计算可视化没有直接关联,但他其实TVTK,Mayavi,TraitsUI基础 安装: pip3 install traits--cp36-cp36 ...
- Python科学计算三维可视化(整理完结)
中国MOOC<Pyhton计算计算三维可视化>总结 课程url:here ,教师:黄天宇,嵩天 下文的图片和问题,答案都是从eclipse和上完课后总结的,转载请声明. Python数据三 ...
- 科学计算三维可视化---Mlab基础(数据可视化)
推文:科学计算三维可视化---TVTK库可视化实例 使用相关函数:科学计算三维可视化---Mlab基础(管线控制函数) 一:mlab.pipeline中标量数据可视化 通过持续实例,来感受mlab对数 ...
- 科学计算三维可视化---Mlab基础(管线控制函数)
科学计算三维可视化---TVTK管线与数据加载(可视化管线和图像管线了解) 科学计算三维可视化---Mayavi入门(Mayavi管线) Mlab管线控制函数的调用 Sources:数据源 Filte ...
- 科学计算三维可视化---Mlab基础(鼠标选取交互操作)
一:鼠标选取介绍 二:选取红色小球分析 相关方法:科学计算三维可视化---Mlab基础(基于Numpy数组的绘图函数) 1.小球场景初始化建立 import numpy as np from maya ...
- 科学计算三维可视化---TraitsUI的介绍
TraitsUI的介绍 Python中存在Tkinter,wxPython,pyQt4等GUI图像界面编写库,这三类库要求程序员掌握众多的GUI API函数 对于科学计算的应用来说,我们希望可以快速的 ...
随机推荐
- 20145214《网络攻防》逆向及Bof基础实践
20145214<网络攻防>逆向及Bof基础实践 实践说明 本次实践的对象是一个名为pwn1的linux可执行文件. 该程序正常执行流程是:main调用foo函数,foo函数会简单回显任何 ...
- web03-OutputInfo
电影网站:www.aikan66.com 项目网站:www.aikan66.com 游戏网站:www.aikan66.com 图片网站:www.aikan66.com 书籍网站:www.aikan66 ...
- Linux手动添加系统环境共享库路径
1.在以下目录 #/etc/ld.so.conf.d 添加相应的xxx.conf 2.写入所要共享库的路径 如:/usr/lib/ 3.导入共享库配置 $ldconfig
- 作业6 团队项目之(开始第一个Sprint)
一.模仿并超越--类似应用. 五个app:1.四则运算小学堂(500-999次下载 3.57M) 2.小学生算术练习(9000+次下载 232K) 3.小学生加减题生成练习工具(2万-3万次下载 1. ...
- 订制EditText光标
订制EditText光标 设置背景android:background="@null" 设置光标样式:android:textCursorDrawable="@drawa ...
- 配置高可用集群(实验) corosyne+pacemaker
环境准备: 一准备三个虚拟机,把/etc/hosts/文件配置好 192.168.43.9 node0 ...
- Beta阶段团队项目开发篇章2
例会时间: 2016.12.4 例会照片 个人工作 上阶段任务验收: 组员任务都已完成. 任务分配 组员 任务内容 韩慧敏 对调查问卷的结果进行分析和总结,确定Beta阶段各任务的优先级,撰写相关博客 ...
- Scrum 5.0(继4.0)
一,组员任务完成情况 首页设计初步完成但是需要优化界面,只能简单的输出信息和在首页进行登录.界面极其简单. 鸡汤版面设计有困难,问题在于用何种形式来管理用户的数据上传,但是经过小组间的讨论确定设计方向 ...
- c++的继承方式
c++的继承,因为学完过的时间太长,忘了,现在再温习一下. c++的继承方式 1. 公有继承(public) 2. 私有继承(private) 3. 保护继承(protected) 从一个基类派生的继 ...
- [转]让opencv输出人脸检测的得分(置信率)
转自:http://www.cnblogs.com/sciencefans/ 作者:sciencefans 最近项目略多,其中一个需要找出一些和脸比较像但是不是脸的负样本,想用opencv的人脸检测器 ...