TraitsUI——轻松制作用户界面

在开发科学计算程序时,我们希望快速实现一个够用的界面,让用户能够交互式的处理数据,而又不希望在界面制作上花费过多的精力。以traits为基础、以Model-View-Controller为设计思想的TraitUI库就是实现这一理想的最佳伴侣。

1.缺省界面

TraitsUI是一套建立在Traits库基础上的用户界面库。它和Traits紧密相连,如果你已经设计好了一个继承于HasTraits的类的话,那么直接调用其configure_traits方法,系统将会使用TraitsUI自动生成一个界面,以供用户交互式地修改对象的trait属性。

from enthought.traits.api import HasTraits, Str, Int

class SimpleEmployee(HasTraits):
first_name = Str
last_name = Str
department = Str

employee_number = Str
salary = Int

sam = SimpleEmployee()
sam.configure_traits()

此程序创建一个SimpleEmployee类的对象sam,然后调用sam.configure_traits显示出如下的缺省界面:
TraitsUI——轻松制作用户界面_第1张图片
我们连一行界面相关的代码都没有写,却能得到这样一个已经够实用的界面,应该还是很令人满意的吧。为了人工控制界面的设计和布局,就需要我们添加自己的代码了。
##2.自定义界面
Item对象是视图的基本组成单位,每个Item描述界面中的中的一个控件,通常都是用来显示HasTraits对象中的某一个trait属性。每个Item由一系列的关键字参数来进行配置,这些参数对Item的内容、表现以及行为进行描述。其中最重要的一个参数就是name。
然而在真正的界面开发中,需要更加高级的布局方式,例如,将一组相关的元素组织在一起,放到一个组中,我们可以为此组添加标签,定义组的帮助文本,通过设置组的属性使组类的元素同时有效或无效。在TraitUI中,这样的组的功能通过Group对象实现。

# -*- coding: utf-8 -*-
2 from enthought.traits.api import HasTraits, Str, Int
3 from enthought.traits.ui.api import View, Item, Group
4
5 class SimpleEmployee(HasTraits):
6 first_name = Str
7 last_name = Str
8 department = Str
9
10 employee_number = Str
11 salary = Int
12 bonus = Int
13
14 view1 = View(
15 Group(
16 Item(name = 'employee_number', label=u'编号'),
17 Item(name = 'department', label=u"部门", tooltip=u"在哪个部门干活"),
18 Item(name = 'last_name', label=u"姓"),
19 Item(name = 'first_name', label=u"名"),
20 label = u'个人信息',
21 show_border = True
22 ),
23 Group(
24 Item(name = 'salary', label=u"工资"),
25 Item(name = 'bonus', label=u"奖金"),
26 label = u'收入',
27 show_border = True
28 )
29 )
30
31 sam = SimpleEmployee()
32 sam.configure_traits(view=view1)

程序运行效果如下:
TraitsUI——轻松制作用户界面_第2张图片
我们分别创建两个Group传递给View,每个Group中仍然通过Item创建控件,通过Group的关键字参数指定其label和show_border属性。由于View中的所有内容都是Group,它自动地将两个Group放到Tab中,对两个Group进行分标签显示。

你可能感兴趣的:(TraitsUI——轻松制作用户界面)