Computer >> 컴퓨터 >  >> 프로그래밍 >> Python

Tkinter에서 위젯 배경색을 동적으로 변경하는 방법

Tkinter 애플리케이션에서 위젯의 속성을 설정하려면 일반적으로 configure(**options) 메서드를 사용합니다. 이 메서드를 활용하면 배경색, 글꼴 등 위젯의 다양한 속성을 자유롭게 커스터마이징할 수 있습니다.

그런데 때로는 위젯의 배경색을 동적으로 변경하고 싶은 경우가 있습니다. 예를 들어 색상 목록을 미리 정의해 두고, 반복문으로 목록을 순회하면서 배경색을 계속 바꾸는 방식으로 구현할 수 있습니다.

예제 코드

# 필요한 라이브러리 임포트
from tkinter import *
from random import shuffle
import time

# Tkinter 프레임 인스턴스 생성
win = Tk()
win.geometry("700x250")

# 모든 위젯에 적용할 기본 글꼴 지정
win.option_add("*Font", "aerial")

# 배경색을 변경하는 함수 정의
def change_color():
    colors= ['#e9c46a','#e76f51','#264653','#2a9d8f','#e85d04','#a2d2ff','#06d6a0','#4d908e']
    while True:
        shuffle(colors)
        for i in range(0,len(colors)):
            win.config(background=colors[i])
            win.update()
            time.sleep(1)

# 라벨 위젯 표시
label=Label(win, text="Hello World", bg= 'white')
label.pack(pady= 40, padx= 30)

# 배경색을 변경하는 버튼 생성
btn=Button(win, text="Button", command= change_color)
btn.pack(pady= 10)
win.mainloop()

코드 설명

위 코드의 핵심은 change_color() 함수입니다. 이 함수는 여러 개의 HEX 색상 코드를 담은 리스트를 정의하고, shuffle()로 리스트의 순서를 무작위로 섞은 뒤 반복문을 통해 각 색상을 차례대로 윈도우 배경에 적용합니다.

  • shuffle(colors): 색상 리스트의 순서를 랜덤하게 섞어 매번 다른 색상 패턴이 나타나도록 합니다.
  • win.config(background=colors[i]): 현재 인덱스의 색상을 윈도우 배경색으로 설정합니다.
  • win.update(): 화면을 즉시 갱신하여 색상 변화가 실시간으로 보이도록 합니다.
  • time.sleep(1): 1초 간격으로 색상이 전환되도록 실행 속도를 조절합니다.

실행 결과

위 코드를 실행하면 라벨 위젯과 버튼이 포함된 윈도우가 화면에 나타납니다.

Tkinter에서 위젯 배경색을 동적으로 변경하는 방법

버튼을 누르면 change_color() 함수가 호출되어 윈도우의 배경색이 1초마다 무작위 순서로 동적으로 변경됩니다.

Tkinter에서 위젯 배경색을 동적으로 변경하는 방법

참고 사항

이 예제에서는 while True 무한 루프를 사용하기 때문에, 한 번 버튼을 클릭하면 프로그램이 종료될 때까지 색상이 계속 변경됩니다. 만약 특정 횟수만큼만 색상을 변경하고 싶다면 while True 대신 for 루프로 범위를 지정하면 됩니다. 또한 time.sleep() 대신 Tkinter의 after() 메서드를 사용하면 메인 이벤트 루프를 막지 않고 더 안정적으로 색상을 전환할 수 있습니다.