pack
w.pack([opcao1=valor] [, opcao2=valor] ...)
O método pack() posiciona os componentes no componente pai, uns relativamente aos outros.
O método pack() é mais simples que o método grid() mas menos flexível.
Normalmente, o pack() é usado nas seguintes situações:
- Colocar o componente num componente pai de forma a que ele ocupe todo o espaço disponível.
- Colocar um conjunto de compoentes num componente pai, uns em cima dos outros.
- Colocar um conjunto de compoentes num componente pai, uns ao lado dos outros.
Para layouts de maior grau de complexidade, é recomendável o uso de grid() dada a sua maior flexibilidade.
Nota importante: Nunca se deve misturar pack() e grid() no mesmo contentor, podendo conduzir a resultados imprevisíveis.
Atributos
| Opção | Descrição | Valores |
|---|---|---|
| anchor | Onde o componente é posicionado no componente pai | n, s, w, e, nw, ne, sw, se, center (defeito) |
| expand | Indica se o componente se deve expandir de forma a ocupar qualquer espaço extra no componente pai | True, False(defeito) |
| fill | Indica qual o espaço do componente pai que o componente deve ocupar | NONE (defeito): mantém o tamanho original do componente. X: ocupa todo o espaço disponível na horizontal Y: ocupa todo o espaço disponível na vertical BOTH: ocupa todo o espaço disponível na horizontal e na vertical |
| side | Indica a que lado do componente pai o componente se deve alinhar | top(defeito): alinha pelo lado do topo bottom: alinha pelo lado de baixo left: alinha pelo lado esquerdo right: alinha pelo lado direito |
| ipadx | Padding horizontal interno | Nr de pixeis, 0(defeito) |
| ipady | Padding vertical interno | Nr de pixeis, 0(defeito) |
| padx | Padding horizontal externo | Nr de pixeis, 0(defeito) |
| pady | Padding vertical externo | Nr de pixeis, 0(defeito) |
Posicionamento dos componentes com pack()
O método pack() do Tkinter organiza os componentes dentro da janela pai (ou outro componente pai) utilizando a ideia de “empacotamento” de blocos, sem posições fixas ou pré-definidas. Ele adiciona os componentes na ordem em que são chamados, empilhando-os conforme a orientação escolhida
- Ordem de inserção: O primeiro componente empacotado (com
pack()) é colocado na parte superior do componente pai, o segundo logo abaixo, e assim sucessivamente, por padrão porque o valor de defeito do atributo side é TOP.. - Parâmetro side: Permite alterar a direção do empilhamento:
side='top'(padrão): empilha de cima para baixo.side='bottom': empilha de baixo para cima (o mais recente fica em baixo).side='left': empilha da esquerda para a direita.side='right': empilha da direita para a esquerda.
- Preenchimento e expansão:
fill: controla se o widget preenche o espaço disponível horizontalmente ('x'), verticalmente ('y') ou em ambos ('both').expand: seTrue, o widget ocupa todo o espaço extra do pai.
- Espaçamento:
padxepady: definem espaços em branco ao redor do widget
Exemplo 1:
from tkinter import *
window = Tk()
window.title("Tkinter - Pack")
window.geometry("200x100")
w = Label(window, text="Label1", bg="orange", fg="white")
w.pack(fill=X)
w = Label(window, text="Label2", bg="green", fg="black")
w.pack(fill=X)
bt = Button(window, text="Button")
bt.pack(fill=X)
#entra no loop de eventos
window.mainloop()
Saída:

Exemplo 2 – side:
from tkinter import *
window = Tk()
window.title("Tkinter - Pack")
window.geometry("200x100")
bt = Button(window, text="Button")
#alinha no lado direito da janela.
#outros valores: LEFT, TOP, BOTTOM.
bt.pack(side=RIGHT)
#entra no loop de eventos
window.mainloop()
Saída:

Exemplo 3 – fill:
from tkinter import *
window = Tk()
window.title("Tkinter - Pack")
window.geometry("200x100")
bt = Button(window, text="Button")
#ocupa todo o espaço na horizontal
bt.pack(fill=X)
#entra no loop de eventos
window.mainloop()
Saída:

Exemplo 4 -fill, expand:
from tkinter import *
window = Tk()
window.title("Tkinter - Pack")
window.geometry("200x100")
bt = Button(window, text="Button")
#ocupa todo o espaço na vertical
bt.pack(fill=Y, expand=True)
#entra no loop de eventos
window.mainloop()
Saída:

Exemplo 5:
from tkinter import *
window = Tk()
window.title("Tkinter - Pack")
window.geometry("250x100")
lbl = Label(window, text="Nome:")
lbl.pack(anchor=W)
entry = Entry(window, bd=1, bg="white")
entry.pack(fill=X)
bt = Button(window, text="Gravar")
bt.pack(anchor=E)
#entra no loop de eventos
window.mainloop()
Saída:

Exemplo 6:
window = Tk()
window.title("Tkinter - Pack")
window.geometry("250x100")
lbl = Label(window, text="Nome:")
lbl.pack(side=LEFT)
entry = Entry(window, bd=1, bg="white")
entry.pack(side=LEFT, expand=True)
bt = Button(window, text="Gravar", padx=10)
bt.pack(side=BOTTOM, anchor=E)
#entra no loop de eventos
window.mainloop()
Saída:

