Discuz! Board

 找回密码
 立即注册
搜索
热搜: 活动 交友 discuz
查看: 3816|回复: 6

[Tcl/Tk] Tcl/Tk简介 [复制链接]

Rank: 8Rank: 8

发表于 2012-8-25 11:01:37 |显示全部楼层
Tcl
(最早称为“工具命令语言”"Tool Command Language",但是目前已经不是这个含义,不过我们仍然称呼它为TCL)是一种脚本语言。由John Ousterhout创建。TCL很好学,功能很强大。TCL经常被用于快速原型开发,脚本编程,GUI和测试等方面。TCL念作“踢叩”(tickle)。Tcl的特性包括:
  • 任何东西都是一条命令,包括语法结构(for,if等)。
  • 任何事物都可以重新定义和重载。
  • 所有的数据类型都可以看作字符串。
  • 语法规则相当简单。
  • 提供事件驱动给Socket和文件。基于时间或者用户定义的事件也可以。
  • 动态的域定义。
  • 很容易用C, C++,或者Java扩展。
  • 解释语言,代码能够动态的改变。
  • 完全的Unicode支持。
  • 平台无关。Win32UNIXMac上都可以跑。
  • 和GUI紧密集成。Tk
  • 代码紧凑,易于维护。
TCL本身在8.6以後提供面向对象的支持。因为语言本身很容易扩展到支持面向对象,所以在8.6之前存在许多C语言扩展提供面向对象能力,包括XOTcl, Incr Tcl等。另外SNIT扩展本身就是用TCL写的。
使用最广泛的TCL扩展是TK。 TK提供了各种OS平台下的图形用户界面GUI。PerlPython等语言都提供接口适配到TK上。另一个流行的扩展包是Expect. Expect提供了通过终端自动执行命令的能力,例如(passwd, ftp, telnet等命令驱动的外壳).
目录 [隐藏]

[编辑] 擴充套件Tcl支援擴充套件,這些擴充套件提供了額外的功能(像是GUI,自動化,資料庫存取等)。
下面是一些Tcl擴充套件的列表:
[编辑] 範例下面是TCL程序的例子:
  1. #!/bin/sh
  2. # next line restarts using tclsh in path \
  3. exec tclsh $0 ${1+"$@"}

  4. # echo server that can handle multiple
  5. # simultaneous connections.

  6. proc newConnection { sock addr port } {

  7.      # client connections will be handled in
  8.      # line-buffered, non-blocking mode
  9.      fconfigure $sock -blocking no -buffering line

  10.      # call handleData when socket is readable
  11.      fileevent $sock readable [ list handleData $sock ]
  12. }

  13. proc handleData { sock } {
  14.      puts $sock [ gets $sock ]
  15.      if { [ eof $sock ] } {
  16.         close $sock
  17.      }
  18. }

  19. # handle all connections to port given
  20. # as argument when server was invoked
  21. # by calling newConnection
  22. set port [ lindex $argv 0 ]
  23. socket -server newConnection $port

  24. # enter the event loop by waiting
  25. # on a dummy variable that is otherwise
  26. # unused.
  27. vwait forever
复制代码
另外一个TK的例子(来自A simple A/D clock)它使用了定时器时间,3行就显示了一个时钟。
  1. proc every {ms body} {eval $body; after $ms [info level 0]}
  2. pack [label .clock -textvar time]
  3. every 1000 {set ::time [clock format [clock sec] -format %H:%M:%S]} ;# RS
复制代码

解释:第一行定义了过程every, 每隔ms毫秒,就重新执行body代码。第二行创建了标签其内容由time变量决定。第3行中设置定时器,time变量从当前时间中每秒更新一次。

-- 来至维基百科

使用道具 举报

Rank: 8Rank: 8

发表于 2012-8-25 11:04:54 |显示全部楼层
Tk
是一開放原始碼的图形用户界面开发工具,提供許多常用的圖形介面元件(像是選單、按鈕之類)具有跨平台、輕量化等特色。

Tk最初發展於1991年,是以Tcl腳本語言撰寫的擴充套件,目前另有Perl、Python、Ruby、Common Lisp等多種版本,並可在Linux、Unix、Apple Macintoch、Windows等平臺上運行。

使用道具 举报

Rank: 8Rank: 8

发表于 2012-8-25 11:33:40 |显示全部楼层
Wish出自Linux 人-社区维基

跳转到: 导航, 搜索
目录[隐藏]
WISH Section: User Commands (1)
用户命令 | User_Commands [[ ]]
NAME wish - 简单的窗口式(windowing) shell [[ ]]
总览 wish [filename] [arg] [arg ...] [[ ]]
选项 -colormap new 指定窗口使用一个新的私有的调色板(colormap)而不使用给屏幕的缺省的调色板。 -display display 指定显示窗口的显示器(和屏幕)。 -geometry geometry 初始化用于窗口的几何(位置、大小)。如果指定了这个选项,它的值存储在应用的 Tcl 解释器的 geometry 全局变量中。 -name name 用 name 作为窗口中显示的标题(title),作为被 send 命令使用的解释器的名字。 -sync 同步的执行所有 X 服务器命令,这样出错就可以立即报告。这将导致执行更慢,但 对调试有用。 -use id 指定应用的主窗口要被嵌入标识符(identifier)为 id 的 窗口中,而不是被建立为一个独立的顶层窗口。必须用与 toplevel 组件的 -use 选项的值相同的方式指定 Id (例如,它必须与 winfo id 的返回有一样的形式 (form))。 -visual visual 指定这个窗口使用的视觉效果(visual)。Visual 必须用 Tk_GetVisual 过程所支持的形式。 - - 传递所有剩下的参数到脚本的 argv 变量而不解释它们。这提供了一种机制来传递象 -name 这样的参数到一个脚本而不让 wish 解释它们。 [[ ]]
描述 Wish 是一个由 Tcl 命令语言、Tk 工具箱和一个从标准输入或文件读命令的主程序 构成的简单的程序。它建立一个主窗口接着就处理 Tcl 命令。如果不加参数的调用 wish,或者第一个参数以lq-rq开始,则从标准输入交互的读 Tcl 命令。它将 连续的处理命令直到删除了所有的窗口或在标准输入上到达文件结束。如果在用户 的主(home)目录中存在文件 .wishrc,在从标准输入读第一条命令之前,wish 把这 个文件作为一个 Tcl 脚本来求值。
如果调用 wish 时加了一个初始化 fileName 参数,则 fileName 被作为一个脚本 文件的名字对待。Wish 将对 fileName 中的脚本进行求值(可能是建立一个用户界 面),接着它将响应事件直到所有窗口被删除。将不从标准输入读命令。 在这种情 况下不自动的对 .wishrc 求值,如果需要的话,脚本文件总是可以 source(包含) 它。
  [[ ]]
关于选项 Wish 自动的处理在上面选项总结中描述的所有命令行选项。任何其他的命令行参数被用后面描述的 argc 和 argv 变量直接传递给应用(程序)。
应用的名字用于象 send 这样的命令,从如果指定了 -name 选项,则从其中获得; 否则若指定了fileName则接受之,或者接受调用 wish 所使用的名字。在后两种情 况,如果名字包含lq/rq字符,则只有在最后一个反斜杠后面的字符被作为应用的 名字。
应用(程序)的类被用于通过 RESOURCE_MANAGER 属性或 .Xdefaults 文件来指定选项,除了第一个字母是大写的之外,类的名字同于应用的名字。 [[ ]]
变量 Wish 设置了下列 Tcl 变量:
argc 包含 arg 参数的个数(没有则为 0),不包括上面描述的选项。
argv 包含一个 Tcl 列表,其成员依次是在 - - 选项后面或不匹配在上面的选项段落描述的任何选项的 arg 参数,如果没有这些参数则是一个空串。
argv0 如果指定了 fileName 则在此包含。否则。包含调用 wish 使用的名字。 geometry 如果指定了 -geometry 选项,wish 把它的值复制到这个变量中。如果在 fileName 被求值之后这个变量仍然存在,wish 在一个 wm geometry 命令中使用这个值来设置主窗口的几何(位置、大小)。
tcl_interactive 如果交互式运行 wish 则包含 1(不指定 fileName 并且标准输入是一个终端类设备),否则是 0。
[[ ]]
脚本文件 如果你建立的 Tcl 脚本文件的第一行是
#!/usr/local/bin/wish
则如果你把它标记为可执行的,接着就可以直接在你的 shell 中调用这个脚本文件。这里假定了 wish 被安装在缺省的位置 /usr/local/bin;如果它被安装在其他地方,那么你需要修改上述行来匹配之。许多 UNIX 系统不允许 #! 行超出 30 个字符的长度,所以要确定 wish 可执行文件能被用短文件名访问。
一个更好的途径是用下面三行来开始你的脚本文件:

  1. #!/bin/sh
  2. # the next line restarts using wish \
  3. exec wish "$0" "$@"
复制代码

这种方法比起前面的段落有三个好处。首先,wish 二进制文件的位置不需要填入(hard-wired into) 脚本中: 它可以在你的 shell 查找路径中的任何地方。其次,他超越了(get around)了上种方法的 30 字符的文件名的限制。第三,这种方法在 wish 自身也是 shell 脚本时仍可运行(一些系统要处理多体系或操作系统: wish 脚本选择某个二进制文件来运行)。第三行导致 sh 和 wish 两者来处理脚本,但 exec 只被 sh 执行。 sh 首先处理脚本文件;它把第二行作为脚本文件对待并执行第三行。exec 语句导致 shell 停止处理而启动 wish 来重新处理整个脚本。当 wish 启动时,因为第二行的反斜线导致第三行被作为第二行注释的一部分,它把所有三行都作为注释对待。 提示符
当交互式的调用 wish 时,它通常为每条命令提示lq%rq。你可以通过设置变量 tcl_prompt1 和 tcl_prompt2 来改变提示符。如果存在变量 tcl_prompt1 则它必须由一个输出一个提示符的 Tcl 脚本组成;tclsh 对 tcl_prompt1 中的脚本求值而不是输出一个提示符。变量 tcl_prompt2 以类似的方式用在键入了换行而当前命令却不完整的时候;如果没设置 tcl_prompt2 则对不完整的命令不给以提示符。 [[ ]]
关键字 shell, 工具箱 [[ ]]
作者 Copyright (C) 1991-1994 The Regents of the University of California.Copyright (C) 1994-1996 Sun Microsystems, Inc.Copyright (C) 1995-1997 Roger E. Critchlow Jr.[[ ]] [中文版维护人] 寒蝉退士 [[ ]]
[中文版最新更新] 2001/06/20 [[ ]]
《中国linux论坛man手册页翻译计划》: http://cmpp.linuxforum.net

使用道具 举报

Rank: 3Rank: 3

发表于 2014-2-20 11:39:14 |显示全部楼层
好帖要顶,楼主的头像还是不错滴

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

Archiver|IC Test Forum Inc.

GMT+8, 2019-1-18 01:21 , Processed in 0.209721 second(s), 12 queries .

Powered by Discuz! X2

© 2001-2011 Comsenz Inc.

回顶部