科学计算三维可视化---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函数 对于科学计算的应用来说,我们希望可以快速的 ...
随机推荐
- 四则运算2及PSP0设计项目计划
时间比较紧,我简单写写我的设计思路: 题目在四则运算1的基础上控制产生题目的数量,这个可以用变量控制:打印方式也可选用变量控制,程序的关键是括号的生成.我们可以将整个四则运算式看成()+()的模型,然 ...
- Linux里的2>&1的理解
转载自:https://blog.csdn.net/ggxiaobai/article/details/53507530 我们在Linux下经常会碰到nohup command>/dev/nul ...
- 软工实践-Beta 冲刺 (5/7)
队名:起床一起肝活队 组长博客:博客链接 作业博客:班级博客本次作业的链接 组员情况 组员1(队长):白晨曦 过去两天完成了哪些任务 描述: 1.界面的修改与完善 展示GitHub当日代码/文档签入记 ...
- 软工实践-Beta 冲刺 (2/7)
队名:起床一起肝活队 组长博客:博客链接 作业博客:班级博客本次作业的链接 组员情况 组员1(队长):白晨曦 过去两天完成了哪些任务 描述: 1.界面的修改与完善 展示GitHub当日代码/文档签入记 ...
- 手机连接wifi 访问本地服务器网站
手机连本地wifi后访问 http://192.168.155.1:8001/loc 版权声明:本文为博主原创文章,未经博主允许不得转载.
- datatables 排序 如何禁止
$.extend( true, $.fn.dataTable.defaults, { "searching": false, "ordering" ...
- cobbler技术详解(是PXE二次详解)
Cobbler是PXE的二次封装,使用Python语言开发, 可以用来快速建立 Linux 网络安装环境,它已将 Linux 网络安装的技术门槛,从大专以上文化水平,成功降低到初中以下,连补鞋匠都能学 ...
- docker weave安装
1.升级内核到3.10.0以上,安装iproute22.安装 0.80版本:#wget -O /usr/local/bin/weave https://raw.githubusercontent.co ...
- MachineLearning Exercise 4 :Neural Networks Learning
nnCostFunction 消耗公式: a1 = [ones(m,) X]; z2 = a1*Theta1'; pre = sigmoid(a1*Theta1'); a2 = [ones(m,) p ...
- 【转载】JSP生成静态Html页面
在网站项目中,为了访问速度加快,为了方便百度爬虫抓取网页的内容,需要把jsp的动态页面转为html静态页面.通常有2种常用的方式: 1.伪静态,使用URL Rewriter 2.纯静态,本文中代码实现 ...