2017-08-26 56 views
2

我现在用tkinter工作了一段时间。 有进行配置或在两个方面至少我只知道二:配置tkinter小部件的“更好”方法是什么?

1:frame.config(bg='#123456')

2:frame["bg"] = '#123456'

我用的是后者更频繁。只有同时有更多事情要做,第二个对我来说才有用。 最近我在想,如果他们中的一个比较快或者有其他优势,那就更好了。

我不认为这是一个非常重要的问题,但也许有人知道它。

+1

我不认为这样或那样有任何优势。我倾向于使用第一个,因为如果将来需要配置更多属性,它需要更少的代码更改。我不认为我甚至知道第二种方式可行。 – Matthew

+1

你应该小心这样的问题,因为它不是特别客观,而且会很有意见。如果你问一些更客观的问题,这是一个更好的问题。例如,我怀疑第二种方式实际上是在幕后调用第一种方式。问他们在这方面是否相当,会更客观。 – Matthew

+0

谢谢,我将在未来记住这一点 –

回答

5

学习Tkinter的代码库,我们发现如下:

class Frame(Widget): 
    # Other code here 

class Widget(BaseWidget, Pack, Place, Grid): 
    pass 

class BaseWidget(Misc): 
    # other code here 

class Misc: 
    # various code 
    def __setitem__(self, key, value): 
     self.configure({key: value}) 

因此,这两种方法实际上相当于。行

frame['bg'] = '#123456' 

被解释为frame.__setitem__('bg','#123456'),其通过继承链后发现自己在内部类Misc它简单地把它传递给配置方法。就你关于效率的问题而言,第一种方法可能稍微快一些,因为它不需要被解释得太多,但速度差别太小而不能被过分关注。

+0

并记住,与第二种方法不同,'.config()'方法可以一次更改多个参数。这将是一个很好的理由,说第一种方法更好一些,因为第二种方法需要更少的代码才能获得相同的结果。 –

+0

这是一个很好的观点。是的,如果设置多个参数,那么配置方法当然更可取。正如我在上面的评论中所说的,使用它,即使只有一个参数,也可以让您在未来轻松添加更多参数。然而,这里的要点是,当你追踪执行时它们实际上是相同的,所以它是风格问题。 – Matthew

相关问题