Wish Tcl/Tk 入門

Wish Tcl/Tk 入門

9. 困ったとき、エラー対策

プログラムを作成して実行しても、エラーがでて困るときがたくさ んあります。そのほとんどが、非常に簡単なことが多いので、チェッ クしやすいように、エラーに気づきにくいところを説明します。

エラーの文章を良く読んで見ましょう。多くの場合このエラー の指摘は非常に役に立ちます。該当する行に行く場合には、M-x goto-line (mule の 場合) を使います。

最初に私が良く間違えたのは、変数を使うとき $ を 付け忘れ たことです。また、tcl では 必要のないコンマを付けてしまった ことです。また 必要な 空白を忘れたことです。tcl では できる 限り空白を付けるのが良いです。

unix なら man n command で man が出て来ます。文例は少な いですが、command の 可能な option はこれで調べることができ ます。Windows 上の help はもっと強力です。

さすがに 0 からの出発は大変ですので、ここであげた例をい ろいろ いじってみて動かしてみてください。c 言語や sch script をやったことがある人は、それほどプログラム言語を書くのは苦労 しないはずです。あとは用語の慣れでプログラムを書くスピードが 速くなると思います。

文字化けする場合には、Unix では EUC コード、Windows では Shift JIS コードになっているかを再度確認下さい。日本語コード 変換は Unix なら nkf です。Windows でも Free の Soft が いっ ぱいあります。検索してみてください。tclet では、日本語は使え ません。(私が方法を知りません。)

時々的を外すエラーの指摘がありますが、この場合には (1) 括弧が足りない、閉じていない、種類が違うなどが考えられます。 とくに

Error in startup script: wrong # args: should be 
"proc name args body" while executing ....
の場合は、括弧の関係や種類を見てください。

以下は基本文法と関係しています。

  1. コマンドは、数行にわたる時には { ... } のように中括弧 ではさみます。中括弧は、コマンドで使います。( ... ) の 小括弧は、計算で使います。論理変数等をまとめるときにも使いま す。if の時に if { ( ... ) || ( ... ) } のような使い方をしますの で、if の 外側が時々 ( ... ) になって エラーになります。
    誤 if ($i >=1) {exit}
          @      @ 中括弧でないとだめ
    正 if {$i >=1} {exit}
    
  2. if の構文は良くエラーになりました。elseif や else を使 う場合には、コマンドが継続していることを明らかに分かるように、 中括弧でつなぎます。\ で 文章を継続してもよいですが、中括弧 開く { の方が次の行につなげる時に分かりやすいです。
  3. 変数は大文字小文字を区別します。window 名は 小文字で始 まることが必要のようです。
  4. global の 変数 list は , コンマで区切らずにスペースで区 切ります。tcl/tk でコンマがでることはほとんどありません。
  5. if { 論理 } { コマンド } の 論理とコマンドの部分には ス ペースが必要のようです。これをしないと、error がでます。確認 して見てください。{ .. } や 変数 記号の間には スペースを空け ることが分かりやすく、多くの場合必要です。
    誤 if {$i >=1}{exit}
    正 if {$i >=1} {exit}
                  @ ここに スペースが必要。
    
  6. プログラムがどうしても動かない時には、puts コマンドを たくさんいれて、変数の値を見てください。問題の部分だけ分割出 来るのなら、wish コマンド上で interactive に動かしてください。 Unix 上であれば

    % wish で . の window が開きます。

    % で コマンドをいれます。

  7. 文法を勉強しながらプログラムを作るときには、少しずつ作っ て段々機能を増やすようにします。インターネット上にある例を参 考にすると良いと思います。download できる tcl の 例がいっぱ いあります。

その他 tclet, socket library, perl/tk

Web 上で tcl/tk を使うには、plugin が必要です。plugin に 関してはまだいろいろ制限が多いので使いずらいです。詳しくは、 ここ を見てください。

plugin を download すれば、tcl の言語はそのまま Web 上にのります。 html の ソースに

< p >< embed type="application/x-tcl" width=100 height=50 script="
button .bt1 -text {hello world} -command exit
pack .bt1 -fill both -expand yes 
">
といれれば ok です。これで Web の表現は飛躍的に大きくなると 思います。

plugin の Site-wide/Custom Install がなされていれば、何 も問題なく動くはずです。下の window が見えますか?

You need Tcl Plugin to show this. <br>Please visit the following page to get the Tcl Plugin. <br><a href="http://www.scriptics.com/software/plugin.html">http://www.scriptics.com/software/plugin.html</a>

Hello World のボタンを押すと消えます。うまく行きますか?

netscape の上で tcl/tk を使うのは、tclet という plugin を使います。この plugin は、download で 簡単に入手 できます。 tclet は security 上 file の access などは制限されています。 自分の作った tclet を使うのは安全ですが、人の作ったのを ソー スを見ずに、download するのは危険です。

network を使うのには、tclTCP を使います。network に障害 を与える場合がありますので、利用は十分理解して行う必要があり ます。実は、私はまだ使っていません。だれか tclTCP の ページ を作ってください。

perl/tk というのがあります。perl の機能を使えるのは、文 字操作などには有効であると思います。

いかがでしたか? 自分の勉強のためとコンピュータの授業のた めにこの ページ を作りました。皆様にもお役にたてば幸いです。 tcl/tk の機能は奥が深くて大変ですが、すこしなれて来ると想像 で文法が組めるのは、この言語の柔軟性を示しています。コマンド や属性に共通する部分が多いのはうまい方法ですね。

なにか面白い tcl/tk の教材を作ってくださって、御提供くだ さる方は e-mail くださいませ。登録いたします。

関連リンク

  • Tcl/Tk の勉強の記録
  • Perl/Tk を学ぼう
    rsaito@ee.uec.ac.jp