В Tkinter есть несколько способов (методов, функций, менеджеров геометрии) расположения виджетов Tk (элементов управления, полей ввода, кнопок и т.д) на окне или в родительском контейнере. Это методы:
- place() — позиционирует виджет по абсолютным координатам,
- pack() — позиционирует относительно родительского контейнера и относительно соседей по родительскому контейнеру,
- grid() — вписывает виджеты в сетку
В сегодняшнем видео я разбираюсь с pack()
Кстати в видео я упустил момент expand по горизонтали. Подсказка — используй side=left или right и expand будет работать и по горизонтали.
Полезные ссылки по Tkinter pack()
Код
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 |
import tkinter from tkinter import Tk, Text, Label, Frame import tk """ Документация по pack() http://tcl.tk/man/tcl8.5/TkCmd/pack.htm#M17 """ if __name__ == '__main__': print("** Hola Hey, Azzrael_YT subs!!!\n") r = Tk() r.geometry("600x600") args = {'width': 100, 'height': 100, 'master': r} # АБСОЛЮТНОЕ ПОЗИЦИОНИРОВАНИЕ # Frame(**args, bg="#dd0000").place(x=1, y=1) # Frame(**args, bg="blue").place(x=20, y=20) # Frame(**args, bg="#0f0").place(x=35, y=135) # УПАКОВКА по ВЕРТИКАЛИ/ГОРИЗОНТАЛИ # Frame(**args, bg="#dd0000").pack() # Frame(**args, bg="blue").pack() # Frame(**args, bg="#0f0").pack() # side=TOP - сторона кот. виджет прилипает (TOP, LEFT, BOTTOM, RIGHT) # tkinter.RIGHT или "right" # Frame(r, bg="red", width=100, height=100).pack(side=tkinter.RIGHT) # Frame(r, bg="blue", width=100, height=100).pack(side=tkinter.BOTTOM) # Frame(r, bg="green", width=100, height=100).pack(side="right") # expand=True (1) драка за место в родителе # занять все доступное пространство, если нет конкурентов за него # Frame(r, bg="red", width=100, height=100).pack(expand=True) # Frame(r, bg="blue", width=100, height=100).pack(expand=True) # Frame(r, bg="green", width=100, height=100).pack(expand=True) # fill (X,Y,BOTH) заполнить захваченное пространство (всё или по вертикали/горизонтали # Frame(r, bg="red", width=100, height=100).pack(expand=True, fill=tkinter.BOTH) # Frame(r, bg="blue", width=100, height=100).pack(expand=1, fill=tkinter.Y) # Frame(r, bg="green", width=100, height=100).pack(fill=tkinter.X) # anchor (N,S,W,E + комбинации) похож на side, но можно цеплять к углам # Frame(**args, bg="red").pack(expand=1, anchor=tkinter.E) # Frame(**args, bg="blue").pack(expand=1, anchor=tkinter.SW) # Frame(**args, bg="green").pack(expand=1, anchor=tkinter.CENTER) # paddings ipad(x/y) pad(x/y) Frame(**args, bg="red").pack(padx=10, pady=10) Frame(**args, bg="blue").pack(ipadx=40, ipady=50) Frame(**args, bg="green").pack() r.mainloop() |
Буду благодарен за ваши лайки (дислайки тоже можно) и комментарии к видео на YouTube. Знаешь ткинтер лучше и не лень поправить меня — тоже велкаме!