Tcl/Tk 烹调书 - Tcl/Tk 和 C


Step 3: 建立使用用户定义的命令 Tk 应用。

GUI

下列简单的脚本建立一个基于 Tk 的应用,看起来象:

这个应用的窗口有一个顶层菜单条,它有一个下拉菜单设置 3D 对象的颜色,还使用 Tk 标尺组件来指定旋转的角度。标尺条连接到画布组件上。

	
frame .fr1 -width 18c -height 15.0c -bd 2 ;#main frame
#toplevel .fr1
pack .fr1
frame .fr1.menubar -relief raised -bd 2
pack .fr1.menubar -padx 1 -fill x

menubutton .fr1.menubar.graphics -text Graphics -underline 0 -menu \
		.fr1.menubar.graphics.menu
button .fr1.menubar.qb -text Quit -underline 0 -com exit
pack .fr1.menubar.graphics -side left
pack .fr1.menubar.qb -side right
#Graphics menu
menu .fr1.menubar.graphics.menu
.fr1.menubar.graphics.menu add cascade -label "Line Colour" \
	-menu .fr1.menubar.graphics.menu.fmenu

menu .fr1.menubar.graphics.menu.fmenu
.fr1.menubar.graphics.menu.fmenu add radiobutton -label "Magenta" \
		-com {ChangeColour "Magenta"}
.fr1.menubar.graphics.menu.fmenu add radiobutton -label "Yellow" \
	-com {ChangeColour "Yellow"}

.fr1.menubar.graphics.menu.fmenu add radiobutton -label "White" \
	-com {ChangeColour "White"}

frame .fr1.panl -width 2.0c -height 12.0c -bg black
frame .cfr -width 16.0c -height 12.0c -bd 1

pack .fr1.panl .cfr -in .fr1 -side left -padx 2 -fill x

canvas .can -width 12.0c -height 11.8c -xscrollcommand ".xs set" \
	-yscrollcommand ".ys set"

scrollbar .ys -command ".can yview"
pack .can .ys -in .cfr -side left -fill x -fill y
scrollbar .xs -orient horizontal -command ".can xview"
place .xs -in .fr1 -x 3.2c -y 13.2c -width 12.0c




scale .scal -label "rotate box throu" -bigincrement 30 \
-from 0 -to 360 -showvalue True -orient horizontal -tickinterval 0  \
-variable cval -com {rotate_box $cval}


pack .scal -in .fr1.panl


tkwait visibility .scal
SetupPhigs .can
MakeCube


proc ChangeColour { curcolour } {
ChCol $curcolour
}

注意给标尺组件的选项。通过调用"tkwait"来挂起进程一直等到标尺组件可见。这确保画布组件在它的 X 标识符被访问之前已被建立。如果没有它,PHIGS 将尝试在不存在的 X 窗口中打开它的工作站并为此而抱怨。

在工作目录中的一个文件中建立这个脚本。要调用你扩展的 "wish",你可以包含下面的这一行:


#!./myapp


作为你的脚本的第一行。否则,从命令行交互的运行 myapp 并 source 这个脚本(确保这个脚本文件是可执行的)。结果将是:

你将发现 PHIGS 更新工作站失败。你可以通过与标尺条或下拉菜单交互来发送一个 X 事件强制进行更新。

Tk 不支持 3D 图形和在画布组件中显示的项目的旋转。在这个例子中,使用 PHIGS 完成了这些功能。旋转和颜色变更的结果看起来将象:

对于有兴趣的读者,我们推荐基于 Tk 的 GOOD ,它是给在 X 下运行的应用的一个面向对象的框架,支持 SGI GL 等。它是自由的但要当心它的文档是德文的。