幾何經理

Tkinter 有三種幾何管理機制:placepackgrid

place 管理器使用絕對畫素座標。

pack 管理器將小部件放入 4 個方面之一。新視窗小部件放置在現有視窗小部件旁邊。

grid 管理器將小部件放入一個類似於動態調整大小的電子表格的網格中。

地點

widget.place 最常用的關鍵字引數如下:

  • x,小部件的絕對 x 座標
  • y,小部件的絕對 y 座標
  • height,小部件的絕對高度
  • width,小部件的絕對寬度

使用 place 的程式碼示例:

class PlaceExample(Frame):
    def __init__(self,master):
        Frame.__init__(self,master)
        self.grid()
        top_text=Label(master,text="This is on top at the origin")
        #top_text.pack()
        top_text.place(x=0,y=0,height=50,width=200)
        bottom_right_text=Label(master,text="This is at position 200,400")
        #top_text.pack()
        bottom_right_text.place(x=200,y=400,height=50,width=200)
# Spawn Window
if __name__=="__main__":
    root=Tk()
    place_frame=PlaceExample(root)
    place_frame.mainloop()

widget.pack 可以使用以下關鍵字引數:

  • expand,是否填補父母留下的空間
  • fill,是否擴充套件以填充所有空間(NONE(預設),X,Y 或 BOTH)
  • side,反對的一面(TOP(預設),BOTTOM,LEFT 或 RIGHT)

widget.grid 最常用的關鍵字引數如下:

  • row,小部件的行(預設最小的未佔用)
  • rowspan,小部件跨越的 colums 數量(預設為 1)
  • column,小部件的列(預設為 0)
  • columnspan,小部件跨越的列數(預設為 1)
  • sticky,如果網格單元格大於它,則放置小部件(N,NE,E,SE,S,SW,W,NW 的組合)

行和列是零索引。行增加下降,列增加正確。

使用 grid 的程式碼示例:

from tkinter import *

class GridExample(Frame):
    def __init__(self,master):
        Frame.__init__(self,master)
        self.grid()
        top_text=Label(self,text="This text appears on top left")
        top_text.grid() # Default position 0, 0
        bottom_text=Label(self,text="This text appears on bottom left")
        bottom_text.grid() # Default position 1, 0
        right_text=Label(self,text="This text appears on the right and spans both rows",
                         wraplength=100)
        # Position is 0,1
        # Rowspan means actual position is [0-1],1
        right_text.grid(row=0,column=1,rowspan=2)

# Spawn Window
if __name__=="__main__":
    root=Tk()
    grid_frame=GridExample(root)
    grid_frame.mainloop()

切勿在同一幀內混合 packgrid! 這樣做會導致應用程式死鎖!