1. Traits基础
来源:互联网 发布:ubuntu c语言开发工具 编辑:程序博客网 时间:2024/06/05 22:32
- Traits
- Traits属性表示颜色
- Trait属性的功能
- Trait属性监听
- 静态监听
- 动态监听
- 监听函数调用顺序
- on_trait_change
- Event和Button属性
- Property属性
Traits
Python作为一种动态编程语言,它的变量没有类型,这种灵活性给快速开发带来便利,不过也存在一定的缺点。
例如:颜色属性
- ‘red’ 字符串
- 0xff0000 整数
- (255, 0, 0) 元组
但是’abc’不是合法的颜色值。
Traits库可以为Python添加类型定义。
Traits属性解决color类型问题
- 接受能表示颜色的各种类型的值。
- 赋值为不能表达颜色的值时,它能够立即捕捉到错误,提供一个错误报 告,告诉用户能够接受什么值。
- 它提供一个内部、标准的颜色表达方式。
官方文档
Traits属性表示颜色
当输入c.color = 'abc'
时:
输入c.configure_traits()
。会弹出一个对话框。
点击红色部分可以选择颜色。
选择完成:
关闭窗口后返回True。
此时再次查看颜色,可以看到已经变为选择的颜色了。
Trait属性的功能
Trait库为Python对象的属性增加了类型定义功能。
还提供了功能:
- 初始化:每个Trait属性都有自己的默认值。
- 验证:Trait属性有明确的类型定义,满足定义的值才能赋值给属性。
- 代理:Trait属性值可以代理给其他对象的属性。
- 监听:Trait属性值发生变化时,运行事先指定的函数。
- 可视化:拥有Trait属性的对象,可生成编辑Trait属性的界面。
from traits.api import Delegate, HasTraits, Instance, Int, Strclass Parent(HasTraits): # 初始化:last_name被初始化为'Zhang' last_name = Str('Zhang')class Child(HasTraits): age = Int # 验证:father属性的值必须是Parent类的实例 father = Instance(Parent) # 代理:Child实例的last_name属性代理给其father属性的last_name last_name = Delegate('father') # 监听:当age属性的值被修改时,下面的函数将被运行 def _age_changed(self, old, new): print('Age change from %s to %s' % (old, new))
没有设置c.father属性,无法获得它的last_name属性:
设置father属性后,可以得到c的last_name属性:
c的age属性值发生变化时,将触发其监听函数_age_changed()
:
调用configure_traits()显示一个修改属性值的对话框:
由于father的属性是Parent类的对象,所以界面中以一个按钮来表示。
点击Father按钮,会弹出一个新的窗口:
这两个对话框中的last_name会同步改变。
print_traits()方法输出所有trait属性与其值。
get()方法获得描述对象所有trait属性的字典。
set()方法trait属性的值。
Trait属性监听
两种监听模式:
- 静态监听
- 动态监听
静态监听
_age_changed(self)
_age_changed(self, new)
_age_changed(self, old, new)
_age_changed(self, name, old, new)
动态监听
observer()
observer(new)
·observer(obj, name, new)` observer(name, new)
observer(obj, name, old, new)
监听函数调用顺序
on_trait_change
@on_trait_change('age') def print_info(self): print('age', 'has changed')
Event和Button属性
Event属性与其他Trait属性的区别:
_event_fired()
_trait_changed()
Button属性:
- 具备Event事件处理功能
- 通过TraitsUI库,自动生成界面中的按钮控件
Property属性
- Property属性会建立与其他属性的依赖关系。(在这个例子里是w和h)
- 有set和get方法(这个例子中只设置了get,所以area是只读的)。
@cached_property
会将area的值放入缓存,只有在area的值需要变化时才会调用_get_property
否则直接返回缓存中的值。
edit_traits
无响应……网上也没有和我遇到相同情况的,只能用configure_traits
了,这两个功能基本一样,edit_traits
有的参数configure_traits
全有。
这里找到了一段描述它们区别的文字。
7.2.1 外部视图和内外部视图
edit_traits()和configure_traits()一样,也被用于生成界面,它们的区别在于:edit_traits()显示界面之后不进入后台界面库的消息循环,因此如果直接运行只调用edit_traits()的程序,界面将在显示之后立即关闭,程序的运行也随之结束。而对于configure_traits(),将进入消息循环,直到用户关闭所有窗口。因此通常情况下,主界面窗口或模态对话框①使用configure_traits()显示,而无模态窗口或对话框则使用edit_traits()显示。
- 1. Traits基础
- traits编程基础
- traits编程基础
- php【基础学习十九】Traits
- traits
- traits
- traits
- Traits
- Traits
- C++模板之traits 以模板特化为基础
- traits:Traits技术初探
- traits:Traits技术初探
- traits:Traits技术初探
- traits:Traits技术初探
- traits:Traits技术初探
- traits:Traits技术初探
- traits技巧
- function traits
- 前后台Date类型相互转换
- debian软件源sources.list文件格式说明
- IDEA 神插件:JreBel----热部署工具
- RK 3299 Ubuntu 配置密钥
- JMeter-Test Fragment
- 1. Traits基础
- C语言中常见库函数编写(占坑)
- web.xml中的welcome-file-list(欢迎页)
- Https报错状态码
- Python 运行脚本时传递参数
- 串口通信基本知识
- Mac 手动签名记录
- Spin控件使用总结
- Java初学者必知:Java语言的11大特点