[unix_tcl] TCL-TK 图形界面工具箱
(2012-01-06 15:46:58)
标签:
tcltkit |
分类: unix/linux |
构件的介绍
创建构件的基本方法是:
widget_type
这里的 widget_type 是下面列出的构件类型之一,path 是窗口的路径名(通常以一个圆点开始,它是根窗口的名字),option 是构件能够识别的任一选项。tk 工具箱定义的构件类型包括:
canvas 用于绘制对象
entry 用于单行文本的输入
frame 用来包含其他构件
listbox 显示一组字符串并允许对其中一个或多个字符串进行选择
menu 显示菜单条和菜单项
text 显示多行文本
label 显示单行静态文本
button 显示一个可点击按钮的构件
checkbutton 显示一个可选的方框
radiobutton 显示多个互相排斥只能单选的方框
scale 类似滚动条,它用来设置一个值
要想创建和操作构件,必须使用wish(windowing shell)。当需要交互地调用 wish 时,在 UNIX 提示符下输入wish ,此时将会出现如下 wish 提示符:
%
与此同时,在屏幕上将弹出一个空的窗口。这一窗口是 wish 的根窗口(称为.),以后创建的所有构件将随此窗口一起显示。
创建构件
本节说明如何创建和操作构件。首先,我们来创建一个按钮:
button .button;
这一行代码用来干什么呢?现在,我们就来解释一下。由于在这一行中指定的构件类型为 button ,因此也将创建一个按钮;这里设定的路径为 .button ,所以 tk 将在根窗口( .是tk 的根窗口)中创建按钮,并把它命名为button 。
现在按钮在哪儿呢?此时也只是创建了按钮,按钮并没有被立即显示。为了显示按钮,需要告诉 tk 如何来显示这一构件。为此,利用 pack 命令并给出所要显示的构件的路径:
pack .button;
当运行这一命令后,按钮将被显示出来,但它却是空的(参见图3 3 - 1 ),这正是构件的选项所要派上用场的地方。
构件的选项
所有构件都可以使用标准的选项来控制它们的外观和功能。大多数构件可以识别如下选项:
-background color ,-bg color 构件的背景色。有效值的格式为 #RRGGBB 和 #RRRGGGBBB ,或者是 /usr/lib/X11/rgb.txt 所定义的名字之一
-foreground color ,-fg
color 构件的前景色。有效值的格式为 #RRGGBB 和 #RRRGGGBBB
-height pixels :构件的高度(以像素为单位)
-width pixels 构件的宽度(以像素为单位)
-borderwidth pixels ,-db pixels 构件的边缘宽度(以像素为单位)
-padx pixels 构件在x 方向上所要求的附加空距
-pady pixels 构件在y 方向上所要求的附加空距
-relief type 构件的 3D
效果,这里的 type 是下列字符串之一:flat 、raised
-text string 在构件中显示的字符串
-font font 在构件中显示文本所使用的字体。有效的字体定义由命令 xlsfonts 给出
-command command 当利用构件时所执行的 tcl 命令,它通常是一个过程名或 exec 语句
除了上面的选项外,pack 命令还可以识别它自己的一些选项:
-side type 控制构件排放的位置。它的有效排放类型为 left 、right 、top 或 bottom 。例如,left 表示新构件应排放在现有构件的左边
-fill type 控制构件是否充满窗口所打开的空间。它的有效值为 none 、x 、y 或 both 。例如,both 表示构件应充满被打开的整个空间
-expand value 控制构件是否随着窗口大小的增加而扩大。这里的 value 或者是0 或者是1 ,
表示构件的大小随窗口的变化而变化
一个TCL./TK 构件的编程示例
foreach I { raised sunken flat groove ridge} {
label .$I –relief $I –text $I;
pack .$I
}
第一种方法是把循环改写为:
foreach I { raised sunken flat groove ridge} {
label .$I –relief $I –text $I –height 10 –width 10;
pack .$I –side left
}
第二种方法是利用 configure 选项重新配置标签,configure 选项的语法是:
widget configure option
在这里,你可以利用下面的循环(在创建标签之后):
foreach I { raised sunken flat groove ridge} {
.$I configure –height 10 –width 10;
pack .$I –side left
}
在本例中,想要使用循环新版本的唯一方法是利用 destroy 命令破坏现有的标签,就像下面这样:
foreach i {raised sunken flat groove ridge} {destroy .$i}
现在让我们回到这个例子。可以看出,有两方面的问题应该解决。
一方面的问题是,标签之间相距太近,因此难以区分,另一方面的问题是:窗口的大部分是空的。通过在排放标签时填充空白并通过增加它们的边框宽度,可以使它们很容易地被区分开来。为了使标签占用全部可用的空间,可以把
pack
注意为了查看 fill
注意为了查看 fill