Resumo : neste tutorial, você aprenderá a usar o LabelFrame
widget Tkinter que contém outros widgets.
Introdução ao Tkinter LabelFrame
O widget Tkinter LabelFrame
é um contêiner que contém outros widgets relacionados. Por exemplo, você pode agrupar widgets Radiobutton e colocar o grupo em um arquivo LabelFrame
.
Para criar um LabelFrame
widget, você usa ttk.LabelFrame
:
lf = ttk.LabelFrame(container, **option)
Linguagem de código: Python ( python )
Nesta sintaxe, você especifica o componente pai ( container
) de LabelFrame
e uma ou mais opções. Uma opção notável é text
especificar um rótulo para o arquivo LabelFrame
.
Exemplo de widget Tkinter LabelFrame
O programa a seguir ilustra como criar um LabelFrame
widget que agrupa três botões de opção:
import tkinter as tk
from tkinter import ttk
# root window
root = tk.Tk()
# configure the root window
root.geometry('300x200')
root.resizable(False, False)
root.title('LabelFrame Demo')
# label frame
lf = ttk.LabelFrame(root, text='Alignment')
lf.grid(column=0, row=0, padx=20, pady=20)
alignment_var = tk.StringVar()
alignments = ('Left', 'Center', 'Right')
# create radio buttons and place them on the label frame
grid_column = 0
for alignment in alignments:
# create a radio button
radio = ttk.Radiobutton(lf, text=alignment, value=alignment, variable=alignment_var)
radio.grid(column=grid_column, row=0, ipadx=10, ipady=10)
# grid column
grid_column += 1
root.mainloop()
Linguagem de código: Python ( python )
Saída:
Como funciona.
Primeiro, crie um LabelFrame
widget e use o gerenciador de geometria de grade para gerenciar seu layout:
lf = ttk.LabelFrame(root, text='Alignment')
lf.grid(column=0, row=0, padx=20, pady=20)
Linguagem de código: Python ( python )
Segundo, crie os três widgets de botão de opção com base na lista de alinhamentos e coloque-os no widget de quadro de etiqueta:
grid_column = 0
for alignment in alignments:
# create a radio button
radio = ttk.Radiobutton(lf, text=alignment, value=alignment, variable=alignment_var)
radio.grid(column=grid_column, row=0, ipadx=10, ipady=10)
# grid column
grid_column += 1
Linguagem de código: Python ( python )
Especifique a posição do rótulo
Para especificar a posição do rótulo no widget, você usa a labelanchor
opção. O labelanchor
padrão é 'nw'
, que coloca o rótulo na extremidade esquerda da borda superior:
O programa a seguir ilustra as opções de âncora do rótulo. Quando você seleciona uma opção de rótulo, o rótulo do widget LabelFrame muda de acordo:
import tkinter as tk
from tkinter import ttk
# root window
root = tk.Tk()
root.title('LabelFrame Label Anchor')
# label frame
lf = ttk.LabelFrame(root, text='Label Anchor')
lf.grid(column=0, row=0, padx=20, pady=20, sticky=tk.NSEW)
anchor_var = tk.StringVar()
anchors = {
'nw': {'row': 0, 'column': 1},
'n': {'row': 0, 'column': 2},
'ne': {'row': 0, 'column': 3},
'en': {'row': 1, 'column': 4},
'e': {'row': 2, 'column': 4},
'es': {'row': 3, 'column': 4},
'se': {'row': 4, 'column': 3},
's': {'row': 4, 'column': 2},
'sw': {'row': 4, 'column': 1},
'ws': {'row': 3, 'column': 0},
'w': {'row': 2, 'column': 0},
'wn': {'row': 1, 'column': 0}
}
def change_label_anchor():
lf['labelanchor'] = anchor_var.get()
# create radio buttons and place them on the label frame
for key, value in anchors.items():
# create a radio button
radio = ttk.Radiobutton(
lf,
text=key.upper(),
value=key,
command=change_label_anchor,
variable=anchor_var
).grid(**value, padx=10, pady=10, sticky=tk.NSEW)
# set the radio button selected
anchor_var.set(lf['labelanchor'])
# show the root window
root.mainloop()
Linguagem de código: Python ( python )
Como funciona.
Primeiro, crie um widget LabelFrame e coloque-o na janela raiz:
lf = ttk.LabelFrame(root, text='Label Anchor')
lf.grid(column=0, row=0, padx=20, pady=20, sticky=tk.NSEW)
Linguagem de código: Python ( python )
A seguir, defina um objeto StringVar que será associado aos botões de opção:
anchor_var = tk.StringVar()
Linguagem de código: Python ( python )
Em seguida, defina um dicionário com a chave armazena as opções de rótulo e o valor armazena a célula (linha, coluna) da grade:
anchors = {
'nw': {'row': 0, 'column': 1},
'n': {'row': 0, 'column': 2},
'ne': {'row': 0, 'column': 3},
'en': {'row': 1, 'column': 4},
'e': {'row': 2, 'column': 4},
'es': {'row': 3, 'column': 4},
'se': {'row': 4, 'column': 3},
's': {'row': 4, 'column': 2},
'sw': {'row': 4, 'column': 1},
'ws': {'row': 3, 'column': 0},
'w': {'row': 2, 'column': 0},
'wn': {'row': 1, 'column': 0}
}
Linguagem de código: Python ( python )
Depois disso, defina uma função que lide com o evento de alteração do botão de opção. A função altera a labelanchor
opção do LabelFrame
widget para o valor do botão de opção selecionado:
def change_label_anchor():
lf['labelanchor'] = anchor_var.get()
Linguagem de código: Python ( python )
Por fim, crie os botões de opção do anchors
dicionário e coloque-os no widget LabelFrame:
for key, value in anchors.items():
# create a radio button
radio = ttk.Radiobutton(
lf,
text=key.upper(),
value=key,
command=change_label_anchor,
variable=anchor_var
).grid(**value, padx=10, pady=10, sticky=tk.NSEW)
Linguagem de código: Python ( python )
Resumo
- Use
LabelFrame
widget para agrupar widgets relacionados em um grupo. - Use
ttk.LabelFrame(container, **option)
para criar umLabelFrame
widget.