Tcl/Tk 烹调书 - 重访画布


第 1 步: 建立基本的图形用户界面。

脚本

#!/usr/local/bin/wish -f  ;#start wish and pass this script for parsing.


global sb so x1 y1 lw  ;#declare some globals

frame .fr -width 24c -height 13.6c -bd 2 ;#main frame
pack .fr

wm title . "Canvas"

frame .fr.menubar -relief raised -bd 2
pack .fr.menubar -padx 1 -fill x

frame .fr.panl -width 3.6c -height 12.8c -bg black
frame .cfr -width 20.4c -height 12.4c -bd 1

pack .fr.panl .cfr -in .fr -side left -padx 2 -after .fr.menubar -fill x

canvas .can -width 20c -height 12.0c -bg grey -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 .fr -x 3.8c -y 13.3c -width 20.2c


#fill the  top menu
menubutton .fr.menubar.file -text File -underline 0 -menu .fr.menubar.file.menu
menubutton .fr.menubar.edit -text Edit -underline 0 -menu .fr.menubar.edit.menu
menubutton .fr.menubar.graphics -text Graphics -underline 0 -menu \
		.fr.menubar.graphics.menu

pack .fr.menubar.file .fr.menubar.edit .fr.menubar.graphics -side left


menubutton .fr.menubar.help -text Help -underline 0 
pack .fr.menubar.help -side right

#File menu
menu .fr.menubar.file.menu
.fr.menubar.file.menu add command -label Print -command {printCanvas}
.fr.menubar.file.menu add command -label Quit -command exit

#Edit menu

menu .fr.menubar.edit.menu
.fr.menubar.edit.menu add command -label Cut -com {CutSelection}
.fr.menubar.edit.menu add command -label Clear -com {clearCanvas}

#Graphics menu

menu .fr.menubar.graphics.menu
.fr.menubar.graphics.menu add cascade -label "Line Width" \
	-menu .fr.menubar.graphics.menu.fmenu


#Second level menu for Line Width

menu .fr.menubar.graphics.menu.fmenu
.fr.menubar.graphics.menu.fmenu add radiobutton -label "0.5" \
		-com {set lw 0.5}
.fr.menubar.graphics.menu.fmenu add radiobutton -label "2.0" \
	-com { set lw 2.0 }
set lw 1.0

上述脚本建立一个标题是 "canvas"的 Tk 应用主窗口,它拥有一个主框架".fr"。

主框架包括三个框架组件 - ".fr.menubar"是给顶层菜单条的的框架,框架".fr.panl"放置在菜单条的下面并包装在第三个框架".cfr"的左面。注意这个主框架和".fr.panl" 、".cfr" 的宽度和长度的单位是厘米。

建立 Tk 画布组件".can" 作为主(应用的根)窗口的子窗口并放置在".cfr"中。建立滚动条".xs" (水平)和 ".ys" (垂直)并与画布组件相连接。

顶层菜单包括四个菜单按钮,它们的标签是"File"、"Edit"、"Graphics"和"Help"。"File"的菜单条目有 PrintQuit,它们的关联动作是 printCanvasexit;"Edit" 的菜单条目有 CutClear,它们的关联动作是 CutSelectionclearCanvas。"Graphics" 支持另一个层次的菜单,来给绘图基本操作设置 line width

Tk place 命令

注意这个水平滚动条,使用了 place 而不是 pack 命令,参数是固定的 sizelocation,用来在组件中定位组件。这允许在主组件变更大小时从组件改变自身的大小,维持相对的配置。

图形用户界面的结果将类似于: