gyn

Win32下的Perl,无用的select,停滞的Tk,结束吧....

一个界面逻辑与数据分离的例子

在写 bugd 的用户控制板块的时候,涉及到了比较多的弹出选项,虽然有差别,但是总体上还是比较类似的。比如说,在左侧的一列是用于说明的 label ,中间是接收输入的 entry ,右侧是可选的通过显示或隐藏错误图标来表示可用性的 label 。从行角度讲,除了信息输入项外,可能有用到 checkbuton
user-configure.PNG

在还没有意识到重复性之前,我是一个接着一个地写这些代码的,最后弄得程序巨大而拖沓。因此想做一个抽象,来分离显示界面的逻辑与数据的分离,从而达到仅通过修改数据即可得到预期界面的效果。

首先,需要一个方便可用的 geometry manager ,可以考虑 pack grid 。使用 pack ,除非设置好组件的宽度,不然很难对齐,但不同的组件对于宽度的单位也各不相同,会给抽象增加复杂性,所以在这种明显需要对齐的情况中,我个人比较倾向与使用 grid

接着,组件的数据表示要简洁而必要且一目了然,在这点上我花了点功夫,最后还是套用了在 bugd 中用于 C/S 间传递数据的格式。

proc frameData {} {

    # widget:state:width:pathname:text

    return {

    {label:::unl:username entry:readonly:40:une: label::3:veriunl:}

    {label:::pwdl:password entry::40:pwde:}

    {{checkbutton:::chkadmin:if admin?} {}}

    }

}

4 个“ : ”来作为分隔符(当然也可以用其他的)的一串信息,对应上面的注解。为了达到扩展的目的,使用空串来说明该位子由前一个可用组件来占据。

posted on 2009-01-03 11:30 gyn_tadao 阅读(1371) 评论(0)  编辑 收藏 引用 所属分类: TclTk

只有注册用户登录后才能发表评论。
<2009年1月>
28293031123
45678910
11121314151617
18192021222324
25262728293031
1234567

导航

统计

常用链接

留言簿(15)

随笔分类(126)

随笔档案(108)

相册

搜索

最新评论

阅读排行榜

评论排行榜