2011-12-19 4 views
1

私は本当にtkが好きですが、私が持っている1つの問題は、すべてのウィジェットをきれいに管理する方法です。 20個のウィジェットを作成すると、20個の変数があります。通常は、すべての変数を格納するハッシュを作成します。さらに最近では、私は、フレームのように、親オブジェクトを作成し、基本的にはこのようになりますそれに子ウィジェットを追加することができ、親/子関係を持つクラスを作成しました:Tkウィジェットを管理していますか?

parent = TkObject.new(TkRoot.new) 
parent.add("MAIN_FRAME", TkFrame.new.pack) 
parent.child("MAIN_FRAME").add("SUBMIT", TkButton.new(:text => "Submit").pack) 

この私が続けて見つけます整理されたものの、私はウィジェットにアクセスするために本当に長い文字列で終わる。私はこれを行うより良い方法があるかどうか、そして私が上記のクラスで車輪を再構築しようとしているのかどうかを調べようとしています。

答えて

0

Tkのウィジェットの内部名は、それと同じように動作しますが、非常に実行可能な解決策は、「面白い」ウィジェットのハンドルを(通常はハッシュで)保持することです。あなたが直接(Perlの構文を使用して、そう)興味深い部分を参照できるように、次に、あなただけの、あなたのプログラム内のオブジェクトとしてそのハッシュにそのハンドルを使用します。もちろん

$thing->{submit}->invoke(); 

、あなたが」特にオブジェクトの実装の外側からオブジェクトにアクセスする場合は、おそらくそれを見回すメソッドを作成する必要があります。それは少しのパフォーマンスコストを追加しますが、物事をよりきれいに保ちます(Demeterの法則とそのすべて)。

このすべてを処理するには、海洋での水泳のような複雑さをすべて処理することが大切です。水面上で泳いでいる限り、水の深さは関係ありません。 (あなたが本当にネストの膨大な量を必要としている場合、あなたはおそらく、それは間違ってやっている;のGUI ほとんど仕事より良い彼らは非常にネストされたいないとき)

+0

おかげで、それはかなり私は何をすべきかです。私はよりクリーンな方法があることを望んでいたと思う。私はまた、FXrubyを試みてきましたが、これはこの点ではそれほど優れていないようです。 –

+0

@エリック:それは実際にはかなりきれいです。 Perlの(またはRubyの)セマンティクスの性質よりもはるかにクリーンなものを思いつくのは非常に難しいです。オブジェクトハンドルはどこかにある必要があります。 –

関連する問題