Python Tkinter / ttk编码风格的差异?或者更多?

时间:2016-11-02 23:19:10

标签: python python-2.7 tkinter ttk

在Windows7上使用Python(2.7),我已经学习了几周Tkinter和ttk,并注意到一些事情的写法有些不同。

例如,当我使用网格管理器时,

有时我看到(在一行上):

f = Frame(root, ...).grid(...)

其他时候我看到(两行):

f = Frame(root, ...)
f.grid(...)

是否存在差异,或仅仅是个人编码偏好?

我认为pack()类似吗?

另外,当使用sticky()时,我看到了:

grid(sticky(NESW))                   # without quotes, upper case
grid(sticky(N, E, S, W))             # without quotes separate arguments
grid(sticky('nsew'))                 # with quotes single string, lower case
grid(sticky('N' + 'S' + 'E' + 'W'))  # plus sign makes it a single string

以及其他一些包括N,E,S和W的不同顺序。

我尝试了不同的方法,并没有让Tkinter抱怨,但我仍然不确定它是否正常工作。

再次,Tkinter关心还是有区别?

谢谢,Mark

1 个答案:

答案 0 :(得分:2)

标签(...)。网格(...)

执行f = Frame(root, ...).grid(...)时,f的值为None,因为grid(...)会返回None。因此,非常不鼓励这种创建窗口小部件并将窗口小部件放在屏幕上的格式。

如果您需要保留对窗口小部件的引用,则必须创建它们并将它们放在两个单独的语句中。而且,既然您正在为某些小部件执行此操作,那么您应该为所有人保持代码一致。

除了无法保持对小部件的引用之外,我个人的经验是,随着时间的推移,它使代码更难理解和维护。我主张在一个代码块中创建所有小部件,并将它们放在另一个代码块中。

所有几何经理都是如此:packplacegrid

粘性值

实现实际小部件的代码使用文字字符串"n"(北)"s"(南),"e"(东)和"w"(西)作为粘性属性。 Tkinter定义了同名的常量,但我从未理解为什么。

我个人不鼓励使用常量,因为它们不会提供硬编码字符串的任何值。此外,使用字符串而不是常量来组合它们更容易(例如:"nsew" vs N+S+E+W

注意:订单并不重要。您可以按任何顺序放置这些值。

这些常量的值几乎肯定不会在tkinter的生命周期中改变 1 ,如果它们这样做,常量的名称也可能会改变。例如,如果值从" n"到" t" (上图),这个常数不太可能保留" N"因为它很麻烦。

1 为什么?因为tkinter是基于tcl / tk构建的,核心tcl维护者是向后兼容的坚持者。这些常数对于 years 来说是相同的。