作者: 機械伯爵
日時: 2005/12/20(11:19)
 機械です。

 やっぱ、Tkinterはやめときゃよかった(汗)
 今回一回だけなので、見てのとおりかなりいいかげんな説明してます。

> |「さて、説明の続き。ラベルの最後だけど、pack ってい
> |うメソッドを実行してるよね。これは、最終的に準備が
> |ととのったから、実際に GUI に表示させるメソッドなん
> |だ」
> 
> この例では子供がいないんで結果的にそういう動作をしてるんです
> が、packを「表示させるメソッド」と呼んでしまうのはOusterhout
> 先生に悪い気がします。

 これは、どこかのTcl/Tkの本かなにかで「最初に」こういう説明
してたと思ったのでそれを真似たんですが(もちろん、後にジオメ
トリマネージャの話が出たときに説明がありましたが)

 スクリプトの書き方もいいかげんなので、いつもの追加情報(今
書いてます)で、少しフォローしたいと思いますのでご容赦を。
 
> これを見て、私も「な、なんでぇ〜っ!」と思いました。なんでな
> んでしょう? 実際にglobalを入れると動きますが、全然納得でき
> ません。iは変数であってオブジェクトでないし。

 これは、私もよく理由はわからないのですが、imageオプションに
わたされるものは実体が無ければならない(つまり随時参照できな
ければならない)ので、関数ブロック内の仮引数で生成した場合、
上記のようにイメージオブジェクトが消滅し、imageオプションの
中が空(ではないのかな?)になってしまいます。

 多分、リファレンスの

 http://www.python.jp/doc/release/lib/node644.html

にある、変数の扱いの関係だとは思うのですが、正確なところは
私も理解していません。

※今回私はリストを使いましたが、普通はフレームのフィールドとして
 登録します。

> もしかして、Tkinterで、
> 
>   l['image'] = i
> 
> ってやってもTkのパスしか使わず、参照しているオブジェクトをGC
> から保護してくれなかったりするんですかね。だとするとPython 
> の良いところが台無しです。

 その可能性はありえるかもしれませんけど、断言はできません。

 なんせさらっと書いていますが、Tkinterにはかなり苦労させられて、
有名なFredrik Lundhのドキュメントの打ち出しを擦り切れるまで(実際
擦り切れた)くっぴいても、未だになかなか理解しづらいモノです。

 Webページを見るとフレームクラスを継承して作る方法を取られている方
が多いようですが、クラス定義で書くにもなんだか強引に外から中を参照
してる(まぁ、Pythonのオブジェクトは全てそうと言えなくはないですが)
ような形となり、正直外の変数が整理できる以上のメリットがなさそうな
ので(オブジェクト至上主義者でもないですし)私自身は、今回のような
外から書く手続き的っぽい書き方をすることが多いです。

 正直便利なんで時々使ってますが、Tkinterは、まだ理解してないとこが
たくさんあります。

 ……………もしかすると、Tcl/Tkをいいかげんにしかやってないからじゃ
ないかとも思うのですけど(汗)

 /機械伯爵/慣れない雪かきを一日やって体が筋肉痛(住所は名古屋の近く)/