簡體   English   中英

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(...)返回None 因此, 非常不鼓勵這種創建窗口小部件並將窗口小部件放在屏幕上的格式。

如果需要保留對窗口小部件的引用,則必須創建它們並將它們放在兩個單獨的語句中。 既然你正在為某些小部件這樣做,你應該為所有人保持代碼一致。

除了無法保持對小部件的引用之外,我自己的個人經驗是,隨着時間的推移,它使代碼更難理解和維護。 我主張在一個代碼塊中創建所有小部件,並將它們放在另一個代碼塊中。

所有幾何管理器都是如此: packplacegrid

粘性價值觀

實現實際小部件的代碼使用文字字符串"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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM