Como alterar a aparência de widgets dinamicamente usando o método Ttk Style map()

Resumo : neste tutorial, você aprenderá como usar o map()método ttk Style para alterar dinamicamente a aparência de um widget com base em seu estado específico.

Normalmente, um widget ttk permite alterar sua aparência com base em um estado específico.

A tabela a seguir mostra uma lista de estados de widget e seus significados:

Estado Significado
active O mouse está atualmente dentro do widget.
alternate Ttk reservou este estado para uso do aplicativo.
background O widget está em uma janela que não é a janela de primeiro plano. A janela de primeiro plano é uma janela que recebe entradas do usuário. Este estado é relevante apenas para Windows e macOS.
disabled O widget não responderá a nenhuma ação.
focus O widget atualmente está em foco.
invalid O valor do widget é atualmente inválido.
pressed O widget está sendo clicado ou pressionado, por exemplo, quando um widget de botão é pressionado.
readonly O widget somente leitura evita que você altere seu valor atual, por exemplo, um widget somente leitura  Entry não permitirá que você altere seu conteúdo de texto.
selected O widget é selecionado, por exemplo, quando os botões de opção são marcados.

Para alterar a aparência de um widget dinamicamente, você pode usar o map()método do objeto Style:

style.map(style_name, query)Linguagem de código:  Python  ( python )

O map()método aceita o primeiro argumento como o nome do estilo, por exemplo, TButtone TLabel.

A consulta de argumento é uma lista de argumentos de palavras-chave onde cada chave é uma opção de estilo e os valores são listas de tuplas de (state,value).

Por exemplo, o código a seguir altera dinamicamente a cor de primeiro plano de um widget de botão:

import tkinter as tk
from tkinter import ttk


class App(tk.Tk):
    def __init__(self):
        super().__init__()

        self.geometry('300x100')

        button = ttk.Button(self, text='Save')
        button.pack(expand=True)

        style = ttk.Style(self)
        style.configure('TButton', font=('Helvetica', 16))
        style.map('TButton',
                foreground=[('pressed', 'blue'),
                            ('active', 'red')])

        print(style.layout('TButton'))


if __name__ == "__main__":
    app = App()
    app.mainloop()Linguagem de código:  Python  ( python )

Neste exemplo, quando você move o foco para o botão, a cor do texto muda para vermelho. E quando você clica ou pressiona o botão, a cor do texto fica azul.

Saída:

Resumo

  • Use o style.map()método para alterar dinamicamente a aparência de um widget com base em seu estado específico.

Deixe um comentário

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