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

Python Tkinter / ttk differences in coding styles? Or more?

在 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 关心还是有区别?

谢谢,马克

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

当您执行 f = Frame(root, ...).grid(...) 时,f 将具有 None 的值,因为 grid(...) returns None。因此,强烈建议不要使用这种创建小部件并将小部件布局在屏幕上的格式。

如果您需要保留对小部件的引用,则必须创建它们并将它们放置在两个单独的语句中。由于您对某些小部件采用这种方式,因此您应该对所有小部件采用这种方式以保持代码一致。

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

同样适用于所有几何管理器:packplacegrid

粘性值

实现实际小部件的代码使用文字字符串 "n"(北)"s"(南)、"e"(东)和 "w"(西)对于粘性属性。 Tkinter 定义了同名常量,但我一直不明白为什么。

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

注意:顺序无关紧要。您可以按任何顺序放置这些值。

这些常量的值几乎肯定不会在 tkinter 的生命周期内发生变化1,如果发生变化,常量的名称也可能会发生变化。例如,如果值从 "n" 更改为 "t"(顶部),则常量不太可能保持 "N",因为它在记忆上令人困惑。


1为什么?因为 tkinter 是建立在 tcl/tk 之上的,而核心的 tcl 维护者坚持向后兼容。这些常量在 十年.

中是相同的