科学计算三维可视化---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函数 对于科学计算的应用来说,我们希望可以快速的 ...
随机推荐
- 第一个spring冲刺第二天
讨论成员:王俊凯.罗凯杰.王逸辉.马志磊 地点:宿舍 话题:讨论关于安卓的控件的应用和如何调用 选题:四则运算 方向:更加实用的计算器功能,功能更加实用并且简单,没有太多的繁琐操作,可以的话会加上些趣 ...
- 【CS231N】6、神经网络动态部分:损失函数等
一.疑问 二.知识点 1. 损失函数可视化 损失函数一般都是定义在高维度的空间中,这样要将其可视化就很困难.然而办法还是有的,在1个维度或者2个维度的方向上对高维空间进行切片,例如,随机生成一个权 ...
- python learning2.py
L = ['Michael', 'Sarah', 'Tracy', 'Bob', 'Jack'] # 取前3个元素的笨方法 r = [] n = 3 for i in range(n): r.appe ...
- express框架结合ejs模板引擎使用
我们在项目里建立一个views文件夹(必须),如果你不想使用views文件夹的话需要调用app.set("views","自定义文件夹名"),然后在里面建立一个 ...
- AVMoviePlayer 视频播放器
AVMoviePlayer 是使用系统框架 MPMoviePlayerController 封装的视频播放器 一.功能: 1.根据手机旋转自由切换横竖屏:2.手势轻点显示/隐藏topView/bott ...
- 软工网络15团队作业8——Beta阶段敏捷冲刺(Day6)
提供当天站立式会议照片一张 每个人的工作 1.讨论项目每个成员的昨天进展 赵铭: 数据库整理. 吴慧婷:我的世界界面完成部分. 陈敏: 我的世界功能--学习情况功能完成. 吴雅娟:我的世界功能--学习 ...
- 爬虫学习之-scrapy交互式命令
scrapy shell https:///www.baidu.com 会启动爬虫请求网页 view(response) 会在浏览器打开请求到的临时文件 response.xpath("/ ...
- 类似jq的即点即改
<?php namespace app\controllers; use Yii;use yii\filters\AccessControl;use yii\web\Controller;use ...
- 卸载Visual Studio最佳方法难道真的是重装系统?
卸载Visual Studio最佳方法难道真的是重装系统? 卸载Visual Studio最佳方法难道真的是重装系统? 使用TotalUninstaller貌似也没有效果,默认卸载的,程序列表里面还是 ...
- mysql查看表中列信息
查看所有数据库中所有表的数据库名和表名 SELECT `TABLES`.`TABLE_SCHEMA`, `TABLES`.`TABLE_NAME` FROM `information_schema`. ...