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:
padx
epady
: 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:
