簡介


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