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çãoDescriçãoValores
anchorOnde o componente é posicionado no componente pain, s, w, e, nw, ne, sw, se, center (defeito)
expandIndica se o componente se deve expandir de forma a ocupar qualquer espaço extra no componente paiTrue, False(defeito)
fillIndica qual o espaço do componente pai que o componente deve ocuparNONE (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
sideIndica a que lado do componente pai o componente se deve alinhartop(defeito): alinha pelo lado do topo
bottom: alinha pelo lado de baixo
left: alinha pelo lado esquerdo
right: alinha pelo lado direito
ipadxPadding horizontal internoNr de pixeis, 0(defeito)
ipadyPadding vertical internoNr de pixeis, 0(defeito)
padxPadding horizontal externoNr de pixeis, 0(defeito)
padyPadding vertical externoNr 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: se True, o widget ocupa todo o espaço extra do pai.
  • Espaçamento:
    • padx e pady: 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: