How to Change the Appearances of Widgets Dynamically Using Ttk Style map() Method

2024. 3. 30. 18:25GUI/tkinter

요약 : 이 튜토리얼에서는 ttk Style map() 메소드를 사용하여 특정 상태에 따라 위젯의 모양을 동적으로 변경하는 방법을 배웁니다.

일반적으로 ttk 위젯을 사용 하면 특정 상태에 따라 모양을 변경할 수 있습니다.

다음 표에는 위젯 상태 목록과 그 의미가 나와 있습니다.

상태 의미
active 마우스가 현재 위젯 내에 있습니다.
alternate Ttk는 이 상태를 애플리케이션 사용을 위해 예약했습니다.
background 위젯이 전경 창이 아닌 창에 있습니다. 전경 창은 사용자 입력을 받는 창입니다. 이 상태는 Windows 및 macOS에만 관련됩니다.
disabled 위젯은 어떤 작업에도 응답하지 않습니다.
focus 현재 위젯에 포커스가 있습니다.
invalid 위젯의 값이 현재 유효하지 않습니다.
pressed 위젯이 현재 클릭되거나 눌려지고 있는 중입니다(예: Button 위젯을 눌렀을 때).
readonly 읽기 전용 위젯은 현재 값을 변경하는 것을 방지합니다. 예를 들어 읽기 전용 Entry 위젯은 텍스트 내용을 변경하는 것을 허용하지 않습니다.
selected 예를 들어 라디오 버튼을 선택한 경우 위젯이 선택됩니다.

위젯의 모양을 동적으로 변경하려면 map()Style 개체의 메서드를 사용할 수 있습니다.

 

style.map(style_name, query)

 

map() 메소드는 첫 번째 인수를 스타일 이름으로 허용합니다(예: TButton 및 TLabel). 인수 쿼리는 각 키가 스타일 옵션이고 값이 (state,value)의 튜플 목록인 키워드 인수 목록입니다.

예를 들어, 다음 코드는 버튼 위젯의 전경색을 동적으로 변경합니다.

 
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()
 

이 예에서는 포커스를 버튼으로 이동하면 텍스트 색상이 빨간색으로 변경됩니다. 그리고 버튼을 클릭하거나 누르면 텍스트 색상이 파란색으로 변합니다.

 

요약

 
  • 특정 상태에 따라 위젯의 모양을 동적으로 변경하려면 style.map() 메서드를 사용하세요.
 

 

'GUI > tkinter' 카테고리의 다른 글

How to Schedule an Action with Tkinter after() method  (0) 2024.04.02
Tkinter Thread  (0) 2024.03.31
Ttk Elements  (1) 2024.03.29
Ttk Styles  (0) 2024.03.28
Tkinter Themes  (0) 2024.03.27