使用 Tcl 来组织桌面
2008-11-13 08:29:26 来源:WEB开发网这段代码中存在一些假像,即将长代码行划分为较短的代码行,但是您可以看到,Tcl/Tk 是一种非常简洁的语言。允许您使用这么少的代码行创建如此复杂的 GUI 程序的编程语言并不多见。
主窗口
除了用来运行解释器的常规的 #! 代码之外,还设置了一些变量:cflag 用来控制主数据条目小部件 .display 如何搜集相应的字符,而 nextkey 则是在构建键数组时所使用的索引。然后,与前一个程序相同,设置窗口标题文本并禁止用户调整其大小。
在这之后,定义了计算器的 display 小部件。这里有几个内容需要说明一下:与大多数计算器的外观一样,文本通常是右对齐的,所以从控件的右边开始搜集键值,并向左边进行滚动。动词 focus 使 display 获得焦点,所以您可以使用键盘或 GUI 按钮来输入表达式。然后,将代码绑定到按下计算器的 Enter 键时或键盘 Enter 键按下时需要执行的操作,这样就完成了 display 小部件:
#!/usr/bin/wish -f
# 1 -- How should it look?
set cflag 0; set nextkey 0
wm title . "50-Line Calculator"
wm resizable . 0 0
grid [entry .display -textvariable expression -justify right] -columnspan 6
focus .display
bind .display <Return> equals; bind .display <KP_Enter> equals
计算器的小键盘
这段代码动态地构建了计算器小键盘上相应的键,通过 display 中的文本定义了每个按钮,在 C、Pi 和 = 键的情况下,当按下这些键时需要执行一个特殊的过程。像 Tcl/Tk 这样,允许您使用这么少的代码行来定义这么多小部件的 GUI 程序的编程语言并不多见。
foreach row {
{7 8 9 + - sin(}
{4 5 6 * / cos(}
{1 2 3 ( ) tan(}
{C 0 . = Pi log(}
} {
foreach key $row {
switch -- $key {
C {set string {set cflag 1; set expression ""}}
Pi {set string pi}
= {set string equals}
default {set string "press $key"}
}
lappend keys [button .[incr nextkey] -text $key -command $string]
}
eval grid $keys -sticky we
set keys [list]
}
更多精彩
赞助商链接