在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
答案 0 :(得分:2)
执行f = Frame(root, ...).grid(...)
时,f
的值为None
,因为grid(...)
会返回None
。因此,非常不鼓励这种创建窗口小部件并将窗口小部件放在屏幕上的格式。
如果您需要保留对窗口小部件的引用,则必须创建它们并将它们放在两个单独的语句中。而且,既然您正在为某些小部件执行此操作,那么您应该为所有人保持代码一致。
除了无法保持对小部件的引用之外,我个人的经验是,随着时间的推移,它使代码更难理解和维护。我主张在一个代码块中创建所有小部件,并将它们放在另一个代码块中。
所有几何经理都是如此:pack
,place
和grid
实现实际小部件的代码使用文字字符串"n"
(北)"s"
(南),"e"
(东)和"w"
(西)作为粘性属性。 Tkinter定义了同名的常量,但我从未理解为什么。
我个人不鼓励使用常量,因为它们不会提供硬编码字符串的任何值。此外,使用字符串而不是常量来组合它们更容易(例如:"nsew"
vs N+S+E+W
)
注意:订单并不重要。您可以按任何顺序放置这些值。
这些常量的值几乎肯定不会在tkinter的生命周期中改变 1 ,如果它们这样做,常量的名称也可能会改变。例如,如果值从" n"到" t" (上图),这个常数不太可能保留" N"因为它很麻烦。
1 为什么?因为tkinter是基于tcl / tk构建的,核心tcl维护者是向后兼容的坚持者。这些常数对于 years 来说是相同的。