2011-12-19 41 views
1

我真的很喜歡tk,但我有一個問題是如何幹淨地管理所有的小部件。如果我創建了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(); 

當然,重新訪問一個像這樣的對象,特別是從對象的實現之外,你可能應該創建一個方法來照顧它。它增加了一點性能成本,但保持更清潔(德米特法則和所有這些)。

處理這一切的全部技巧是處理所有的複雜問題,如在海中游泳;只要你只是在水面上游泳,不管水有多深。 (如果你真的需要嵌套的鉅額資金,你可能就錯了;圖形用戶界面大多更好地工作時,他們非常嵌套)

+0

謝謝,這幾乎是我做什麼。我想我希望有一個更清潔的方式。我也一直在嘗試FXruby,但在這方面似乎沒有任何好轉。 – 2011-12-20 23:34:55

+0

@Eric:其實很乾淨。考慮到Perl(或Ruby)語義的本質,想出比這更清潔的東西是非常困難的;對象句柄必須是_somewhere_。 – 2011-12-22 22:47:39

相關問題