使用 Tcl 来组织桌面
2008-11-13 08:29:26 来源:WEB开发网对于这个 Tcl/Tk 程序,可以在很多方面进行改进。添加创建新文章的按钮或将所有的文章备份到存档的按钮,这些都是值得进行的改进,并且 Tcl/Tk 让您可以轻松地完成这些工作。您还可以设置首选编辑器、xterm 和浏览器。您可以随意地对其进行实验,绝不要将这个桌面扩展仅用于为 IBM 撰写文章:可以对其进行修改,以启动一个编程环境或 Web 技术环境。
一个 50 行代码的科学计算器
现在,您将通过一个更加复杂的 Tcl GUI 程序来组织桌面:通过仅 50 行代码编写的一个科学计算器(请参见清单 2)。这个计算器可以对通过键盘或 GUI 按钮输入的表达式进行计算。如果您输入一个无效的表达式,其文本将变为红色。与清单 1 中的程序一样,您可以将这段代码从屏幕搜集到一个文件,并将其保存为 calc.tcl,使用 chmod 将其权限修改为可执行,然后运行该程序。
清单 2. 50 行代码的计算器
#!/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
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]
}
# 2 -- What should it do?
proc press {key} {
if $::cflag {
set ::expression ""
if ![regexp {[0-9().]} $key] {set ::expression $::results}
.display configure -fg black
.display icursor end; set ::cflag 0
}
.display insert end $key
}
proc pi {} {
if $::cflag {set ::expression ""}
lappend ::expression "3.14159265"
.display icursor end; set ::cflag 0
}
proc equals {} {
regsub {=.+} $::expression "" ::expression
if [catch {lappend ::expression =
[set ::results [expr
[string map {/ *1.0/} $::expression]]]}] {
.display configure -fg red
}
.display xview end; set ::cflag 1
}
更多精彩
赞助商链接