2011-12-19 61 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