簡介
-
Tcl/Tk 是什麼?
- Tcl/Tk 是一個跨平臺
(cross-platform)﹑可擴充 (extensible)
的高階 scripting 語言, 可用以發展 GUI 應用程式.
- 還有那些具有相近優點的語言可以考慮? Java, Perl/Tk,
Python/Tk, Guile/Tk
-
Tcl/Tk 的優缺點
- 基本功能簡單易上手; 程式囉嗦.
- 沒有複雜的資料結構
- incr Tcl 可提供物件導向功能, 但受限於語言基本架構,
很難把所有重要物件導向功能完整表達.
- Tk 提供的功能幾乎已成為所有此類 (跨平臺, 可擴充) 語言的標準
GUI 元件. 也可以 (不太精確地) 說: Tk 語言不僅跨平臺, Tk
的觀念與術語甚至跨程式語言, 對於程式設計師而言,
是具有前瞻性﹑值得長期投資心力學習的 ... 工具 (Tool Kit).
-
取得 Tcl/Tk 解譯器:
- 安裝 GNU/Linux 或是
FreeBSD 時,
直接選取就可以了.
- 在 MS Windows 下, 可以參考
「Cygwin:
微軟視窗底下的自由軟體環境」, 把 gcc/g++ 和 Tcl/Tk
一次裝起來 (但沒有文件); 或是 ... (見下面)
- 其他作業系統的使用者可以到 Tcl/Tk 的大本營
下載可執行檔及豐富的文件
- 安裝完畢後找到一個叫做 widget 的檔案 (在某個叫做 demos
的目錄下), 執行看看. 這個範例程式展示 Tcl/Tk 的 GUI 基本功能,
同時讓你看看要達到這些功能, Tcl/Tk 程式要如何寫.
- 安裝 Tix 擴充套件.
-
試車: 以 wish 命令啟動交談式的 Tcl/Tk 解譯器.
- 離開: exit
在 UNIX 系統下亦可按 Ctrl-D
- 印字串: puts "hello, world!"
- 處理字串 (類似 C 當中的 sprintf): format "%d decimal is
equal to %x hex" 255 255
- 設定變數: set msg "hello, world!"
之後可以用 puts $msg 把變數 msg 的值印出;
又如: set val 255
之後可以用 format "%d decimal is equal to %x hex" $val
$val
- 建立「按鈕」: button .hello -text "press" -command { puts
"hi!" }
顯示建好的按鈕: pack .hello
之後 wish 視窗縮小成一個按鈕, 上面印著 "press", 並且每按一下,
命令視窗就印出 "hi!" 字串. 用 Ctrl-C 強迫中斷.
-
擴充套件 (extension) 的觀念
- Tcl 程式庫是所有 Tcl/Tk 應用軟體最基本的部分
(想像成主機板), 外面包著一層殼 shell (想像成電腦外殼)
讓程式設計師下命令. 包著 Tcl 程式庫的 shell 叫做 tclsh.
-
每個擴充程式庫 extension 提供不同的額外功能
(想像成電腦擴充介面卡), 例如:
- Tk 程式庫提供 GUI 元件; Tcl+Tk 外面包的 shell 叫做 wish
(windowing shell).
- Tix 程式庫提供更高階的 GUI 元件; Tcl+Tk+Tix 外面包的
shell 叫做 tixwish.
-
Tcl WWW Info 列有許多 Tcl/Tk extensions, 包括物件導向,
OpenGL, ODBC, 數學, 加解密, HTML, 音樂, ... 等等.
在你開始用 Tcl/Tk 寫低階程式之前, 請先看看是否有現成的
extension 可以用.
- 你可以在不同的 extension shell 底下用 info commands
命令看看它們各提供多少命令. 如果太多了, 數不出來, 可以用
llength [info commands] 命令數.
-
其他基本觀念與術語
- Tcl/Tk 的 parser 只對程式設計師下的命令列作很簡單的代換,
然後就把代換完的結果丟給該命令 (第一個字串) 處理;
每個命令看到的參數, 則一律是一個個的字串. 例如程式設計師下: set
msg "hello, world!" 則 parser 處理完後成為 set
msg hello, world! 三個字串, 並把控制權交給 set
這個命令.
- 在 Tcl/Tk 的程式裡面, 所有命令看到的參數都是字串.
記牢了喔!