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属性的监听的更多相关文章

  1. 科学计算三维可视化---Traits属性的功能

    Traits属性的功能 Traits库为python的属性增加了类型定义的功能,除此之外他还提供了5个特殊的功能(可以为用户的界面响应提供基本能力):初始化:每个traits属性都有自己的默认值验证: ...

  2. 科学计算三维可视化---Traits(Property属性)

    Property属性 使用Property函数为类创建Property属性,Property属性用法和一般属性相同,但是他在获取值和赋值时会调用相应的方法 traits库也提供了Property属性 ...

  3. 科学计算三维可视化---Traits(Event和button属性)

    Event和button属性 是两个专门用于处理事件的change属性 Event属性和其他Trait属性不一样 Button属性是由Event属性继承而来的 Event监听 from traits. ...

  4. 科学计算三维可视化---Traits介绍

    简介 Traits是开源扩展库,Traits本身与科学计算可视化没有直接关联,但他其实TVTK,Mayavi,TraitsUI基础 安装: pip3 install traits--cp36-cp36 ...

  5. Python科学计算三维可视化(整理完结)

    中国MOOC<Pyhton计算计算三维可视化>总结 课程url:here ,教师:黄天宇,嵩天 下文的图片和问题,答案都是从eclipse和上完课后总结的,转载请声明. Python数据三 ...

  6. 科学计算三维可视化---Mlab基础(数据可视化)

    推文:科学计算三维可视化---TVTK库可视化实例 使用相关函数:科学计算三维可视化---Mlab基础(管线控制函数) 一:mlab.pipeline中标量数据可视化 通过持续实例,来感受mlab对数 ...

  7. 科学计算三维可视化---Mlab基础(管线控制函数)

    科学计算三维可视化---TVTK管线与数据加载(可视化管线和图像管线了解) 科学计算三维可视化---Mayavi入门(Mayavi管线) Mlab管线控制函数的调用 Sources:数据源 Filte ...

  8. 科学计算三维可视化---Mlab基础(鼠标选取交互操作)

    一:鼠标选取介绍 二:选取红色小球分析 相关方法:科学计算三维可视化---Mlab基础(基于Numpy数组的绘图函数) 1.小球场景初始化建立 import numpy as np from maya ...

  9. 科学计算三维可视化---TraitsUI的介绍

    TraitsUI的介绍 Python中存在Tkinter,wxPython,pyQt4等GUI图像界面编写库,这三类库要求程序员掌握众多的GUI API函数 对于科学计算的应用来说,我们希望可以快速的 ...

随机推荐

  1. 2017-2018-2学期 20172324《Java程序设计》第六周学习总结

    20172324<Java程序设计>第六周学习总结 教材学习内容总结 如何创建数组以及int[] X与int X[]的区别(编译时是没有差别的,只是前者与其他类型的声明方式有一致性) 每一 ...

  2. java List.get

    并不能 用如果List在i位置值不存在 并不能 List.get(i) !=null 判断 会抛异常 版权声明:本文为博主原创文章,未经博主允许不得转载.

  3. asp.net登录验证FormsAuthenticationTicket和FormsAuthentication类

    登录部分使用的类 FormsAuthentication   为 Web 应用程序管理 Forms 身份验证服务. 配置启用身份验证,WEB.config配置: <system.web> ...

  4. 旧文备份:CANopen协议中SDO服务

    SDO是服务数据对象接口(Service Data Obiect)的缩写,顾名思义提供服务数据的访问接口,服务数据就是一些实时性要求不高的数据,一般是指节点配置参数,因此,SDO一般用来配置和获得节点 ...

  5. 小学四则运算练习(JAVA编写)

    源码在Github的仓库主页链接地址:https://github.com/rucr9/rucr 看到这个题目,大概很多人会发出“切,这也太简单了吧!有必要小题大做?”的感叹!是的,仅仅作为一道数学运 ...

  6. [转]让opencv输出人脸检测的得分(置信率)

    转自:http://www.cnblogs.com/sciencefans/ 作者:sciencefans 最近项目略多,其中一个需要找出一些和脸比较像但是不是脸的负样本,想用opencv的人脸检测器 ...

  7. Inside Qt Series (全集,共十六篇,不同版本的Qt有不同的实现)

    Inside Qt 系列 QObject这个 class 是 QT 对象模型的核心,绝大部分的 QT 类都是从这个类继承而来.这个模型的中心特征就是一个叫做信号和槽(signaland slot)的机 ...

  8. 计算机网络【6】—— 从浏览器输入URL到显示页面发生了什么

    当在浏览器地址栏输入网址,如:www.baidu.com后浏览器是怎么把最终的页面呈现出来的呢?这个过程可以大致分为两个部分:网络通信和页面渲染. 一.网络通信 互联网内各网络设备间的通信都遵循TCP ...

  9. hbase 过滤器属性及其兼容性

    内容来自于<HBASE权威指南>,留存备查,由于版本的原因,可能已经有变化,在应用前兼容性需要测试.

  10. 注册系统所有的dll文件.bat

    @echo off echo 运行后,能重新注册系统所有的dll文件, echo 能解决内存读写错误的问题 pause echo on for %%1 in (%windir%/system32/*. ...