由於您的GUI似乎有兩個邏輯組的小部件,因此我會按照這種方式來組織它。首先將畫布放在左側,右側放置一個畫框。您可以使用pack
,place
,grid
或一個窗口窗口來管理它們。對於從左到右的方向,pack
是一個不錯的選擇,由於其簡單
請注意,您不必這樣做,但經驗告訴我,它使佈局問題更容易解決。
在下面的例子中,我設置expand
到False
爲按鈕幀,這意味着在畫布將增長,並且當用戶調整(因爲它具有expand=True
)收縮,但按鍵只會佔用完全一樣多的空間他們需要。
canvas = Canvas(root, ...)
buttonframe = Frame(root, ...)
canvas.pack(side="left", fill="both", expand=True)
buttonframe.pack(side="right", fill="both", expand=False)
接下來,你可以把所有在右側的按鈕,而不必擔心自己的位置會如何影響在左邊的對象。
使用grid
時要記住的重要一點是,您應該至少指定一行和至少一列來給予任何額外的空間。這可以是包含小部件的行和/或列,也可以是邊上的空行和列。
button1 = Button(buttonframe, ...)
button2 = Button(buttonframe, ...)
button3 = Button(buttonframe, ...)
...
button1.grid(row=0, column=0)
button2.grid(row=0, column=1)
button3.grid(row=1, column=0)
...
buttonframe.grid_rowconfigure(100, weight=1)
buttonframe.grid_columnconfigure(2, weight=1)
注意:如果你需要一個參考保持到窗口小部件,您必須創建控件和兩個單獨的行調用grid
(或pack
或place
)。這是因爲Button(...).grid(...)
返回最後一個函數調用的值,並且grid(...)
返回None
對畫布使用'grid(rowspan = ...)'或將'Frame'放在右列並將按鈕放在此幀中。 – furas
順便說一句:'var = Widgets()。grid()'因爲'grid()'返回'None',所以將'None'賦給'var'。如果你需要變量,那麼分兩步進行:'var = Widget()'和'var.grid()'。 – furas
'grid(rowspan = ...)'解決了它,謝謝@furas – JMz