2 Менеджеры по геометрии

Tkinter имеет три механизма для управления геометрией: place , pack и grid .

place менеджер использует абсолютные координаты пикселя.

pack менеджер размещает виджеты в один из 4 -х сторон. Новые виджеты размещаются рядом с существующими виджетами.

grid менеджер размещает виджеты в сетку , похожую на динамически изменения размера таблицы.

Место

Наиболее распространенные ключевые аргументы для widget.place заключаются в следующем:

  • x , абсолютные координаты х виджета
  • 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, или ОБА)
  • side , сторона паковать против (TOP ( по умолчанию), НИЖНИЙ, ЛЕВЫЙ или ПРАВЫЙ)

сетка

Наиболее часто используемые ключевые слова , аргументы 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()

 

Никогда не смешивайте pack и grid в том же кадре! Это приведет к тупику приложения!