Tkinter LabelFrame

Resumo : neste tutorial, você aprenderá a usar o LabelFramewidget 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 LabelFramewidget, você usa ttk.LabelFrame:

lf = ttk.LabelFrame(container, **option)Linguagem de código:  Python  ( python )

Nesta sintaxe, você especifica o componente pai ( container) de LabelFramee uma ou mais opções. Uma opção notável é textespecificar um rótulo para o arquivo LabelFrame.

Exemplo de widget Tkinter LabelFrame

O programa a seguir ilustra como criar um LabelFramewidget 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:

Tkinter LabelFrame

Como funciona.

Primeiro, crie um LabelFramewidget 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 += 1Linguagem 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 labelanchoropção. O labelanchorpadrão é 'nw', que coloca o rótulo na extremidade esquerda da borda superior:

âncora tkinter labelframe

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:

Demonstração de âncora de etiqueta Tkinter LabelFrame
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 labelanchoropção do LabelFramewidget 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 anchorsdicioná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 LabelFramewidget para agrupar widgets relacionados em um grupo.
  • Use ttk.LabelFrame(container, **option)para criar um LabelFramewidget.

Deixe um comentário

O seu endereço de email não será publicado. Campos obrigatórios marcados com *