2016-10-17 95 views
2

我正在嘗試使用tkinter在python中創建一些UI。Tkinter - 彼此相鄰的網格元素

這是我使用的代碼示例:

root = Tk() 
root.geometry("1000x700x0x0") 

canvas = Canvas(root, width = 700, height = 700, bg ='white').grid(row = 0, column = 0) 
button1 = Button(root, text = "w/e", command = w/e).grid(row = 0, column = 1) 
button2 = Button(root, text = "w/e", command = w/e).grid(row = 1, column = 1) 

這就是我得到:enter image description here

,這就是我想要的:enter image description here

任何幫助我該怎麼辦?

謝謝!

+1

對畫布使用'grid(rowspan = ...)'或將'Frame'放在右列並將按鈕放在此幀中。 – furas

+1

順便說一句:'var = Widgets()。grid()'因爲'grid()'返回'None',所以將'None'賦給'var'。如果你需要變量,那麼分兩步進行:'var = Widget()'和'var.grid()'。 – furas

+0

'grid(rowspan = ...)'解決了它,謝謝@furas – JMz

回答

3

由於您的GUI似乎有兩個邏輯組的小部件,因此我會按照這種方式來組織它。首先將畫布放在左側,右側放置一個畫框。您可以使用packplace,grid或一個窗口窗口來管理它們。對於從左到右的方向,pack是一個不錯的選擇,由於其簡單

請注意,您不必這樣做,但經驗告訴我,它使佈局問題更容易解決。

在下面的例子中,我設置expandFalse爲按鈕幀,這意味着在畫布將增長,並且當用戶調整(因爲它具有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(或packplace)。這是因爲Button(...).grid(...)返回最後一個函數調用的值,並且grid(...)返回None

+1

謝謝你的答案布賴恩。每當有關於tkinter的問題時,你總是有一個答案! –