[英]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(...)
返回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維護者是向后兼容的堅持者。 幾十年來,這些常數一直是相同的。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.