본문 바로가기
프로그래밍/Python

Tkinter ] Python GUI 프로그래밍

by eteo 2024. 6. 9.

 

 

Tkinter는 파이썬 설치시 기본적으로 내장된 표준 라이브러리로 별도의 설치 없이 바로 GUI 개발을 시작할 수 있다는 장점이 있다.

 

 

Tkinter의 주요 구성 요소

  1. Tk 객체 : GUI 애플리케이션의 메인 윈도우를 생성하는 핵심 객체이다. Tk()를 통해 생성된다.
  2. 위젯(Widgets) : 사용자 인터페이스를 통해 상호작용할 수 있도록 도와주는 각종 UI 요소이다.
    • Label : 텍스트나 이미지를 표시한다.
    • Button : 사용자가 누를 수 있는 버튼을 제공한다.
    • Entry : 한 줄의 텍스트를 입력받는 입력 필드이다.
    • Text : 여러 줄의 텍스트를 입력받는 필드이다.
    • Frame : 다른 위젯들을 그룹핑하고 레이아웃을 관리하는 컨테이너이다.
  3. 배치 관리자(Layout Managers) : 위젝을 윈도우 또는 프레임에 배치하는 방식으로 대표적인 레이아웃 매니저는 다음과 같다.
    • pack() : 위젯을 상하좌우로 순서에 따라 side, anchor, fill 등의 옵션과 함께 배치한다.
    • grid() : 위젯을 grid 형태로 배치하며 rowspan, columnspan 등의 옵션과 함께 사용된다. 
    • place() : 절대좌표 또는 상대좌표를 기반으로 위젯을 배치한다.
  4. 이벤트 및 콜백 : 사용자 입력과 같은 이벤트를 처리하기 위해 콜백 방식을 사용한다.
  5. 옵션 설정 : 각 위젯은 색상, 텍스트, 크기 등 다양한 속성을 가지고 있으며, 이를 통해 위젯의 모양과 동작을 제어할 수 있다.

 

 

 

 

4번, 버튼 클릭 이벤트가 발생했을 때 특정 함수가 호출되도록 하는 예시

from tkinter import *

def on_button_click():
    print("Button clicked!")

win = Tk()
button = Button(win, text="Click me", command=on_button_click)
button.pack(pady=20)

win.mainloop()

 

 

 

5번, 위젯을 생성할 때 생성자에 원하는 속성들을 전달하여 옵션을 설정하는 예시

from tkinter import *

win = Tk()
label = Label(win, text="Hello, Tkinter!", fg="blue", bg="white", font=("Arial", 16))
label.pack()

win.mainloop()

 

 

5번, 위젯이 생성된 후 config 메서드를 사용하여 속성을 변경하는 예시

from tkinter import *

win = Tk()
label = Label(win)
label.pack()
label.config(text="Hello, Tkinter!", fg="blue", bg="white", font=("Arial", 16))

win.mainloop()

 

 

 

 

 

간단한 앱을 작성해봤다.

 

 

 

 

 

 

설명은 주석으로 달아놨다.

 

# tkinter에서 제공하는 모듈을 전부 import
from tkinter import *

# 창 생성
win = Tk()

# 창 크기 조절
win.geometry("360x360")

# 창 제목 설정
win.title("First tkinter app")

# 전체 폰트 설정
win.option_add("*Font", "Consolas 20")

# 창 배경색 설정
win.config(bg='white')

# 엔트리 설정
entry = Entry(win) # 부모 컨테이너 win 안에 Entry 위젯 생성
entry.pack(pady=(10,10)) # pack으로 위젯을 배치하고 위쪽/아래쪽 패딩 10 추가

# 엔트리 인풋을 라벨에 업데이트하는 함수
def update_label():
    input_text = entry.get()
    label.config(text=input_text)
    entry.delete(0, END) # 엔트리 비우기

# 버튼 설정
button = Button(win, text="Update Label", command=update_label)
button.pack(pady=10) # 아래쪽 패딩 10 추가

# 라벨 설정
label = Label(win, bg='white', fg='red')
label.pack()

# 창 실행
win.mainloop()