Akashic Records

12.2 Tkinter 위젯 본문

Python for Beginners

12.2 Tkinter 위젯

Andrew's Akashic Records 2023. 4. 4. 13:27
728x90

Tkinter 위젯은 사용자 인터페이스의 구성 요소입니다. Tkinter에서는 다양한 유형의 위젯을 제공하며, 이를 조합하여 복잡한 GUI 애플리케이션을 만들 수 있습니다. 주요 Tkinter 위젯과 간단한 예제를 살펴봅시다.

Label
Label 위젯은 텍스트 또는 이미지를 표시할 수 있는 레이블입니다.

import tkinter as tk

root = tk.Tk()

label = tk.Label(root, text="This is a Label")
label.pack()

root.mainloop()

 

Button
Button 위젯은 클릭 가능한 버튼입니다. 콜백 함수를 지정하여, 버튼이 클릭되었을 때 원하는 동작을 수행할 수 있습니다.

import tkinter as tk

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

root = tk.Tk()

button = tk.Button(root, text="Click me!", command=on_click)
button.pack()

root.mainloop()

 

Entry
Entry 위젯은 한 줄의 텍스트 입력 필드입니다.

import tkinter as tk

def on_submit():
    print(entry.get())

root = tk.Tk()

entry = tk.Entry(root)
entry.pack()

button = tk.Button(root, text="Submit", command=on_submit)
button.pack()

root.mainloop()

 

Text
Text 위젯은 여러 줄의 텍스트 입력 및 표시를 지원하는 위젯입니다.

import tkinter as tk

root = tk.Tk()

text = tk.Text(root, wrap=tk.WORD)
text.pack()

root.mainloop()

 

Frame
Frame 위젯은 다른 위젯을 그룹화할 수 있는 컨테이너입니다.

import tkinter as tk

root = tk.Tk()

frame = tk.Frame(root)
frame.pack()

label1 = tk.Label(frame, text="Label 1")
label2 = tk.Label(frame, text="Label 2")
label1.pack()
label2.pack()

root.mainloop()

 

Canvas
Canvas 위젯은 도형, 텍스트, 이미지 등을 그릴 수 있는 드로잉 영역입니다.

import tkinter as tk

root = tk.Tk()

canvas = tk.Canvas(root, width=300, height=200)
canvas.pack()

canvas.create_rectangle(50, 50, 250, 150, fill="blue")
canvas.create_text(150, 100, text="Hello Canvas!", fill="white")

root.mainloop()


Menu
Menu 위젯은 드롭다운 메뉴와 메뉴바를 생성하는 위젯입니다.

import tkinter as tk

def on_new():
    print("New selected")

root = tk.Tk()

menu_bar = tk.Menu(root)

file_menu = tk.Menu(menu_bar, tearoff=0)
file_menu.add_command(label="New", command=on_new)
file_menu.add_command(label="Open")
file_menu.add_separator()
file_menu.add_command(label="Exit", command=root.quit)

menu_bar.add_cascade(label="File", menu=file_menu)

root.config(menu=menu_bar)

root.mainloop()


이 예제들은 각 위젯의 기본 사용법을 보여줍니다. 실제 애플리케이션에서는 이러한 위젯들을 조합하여 다양한 사용자 인터페이스를 구성할 수 있습니다. 또한, 위젯의 속성을 변경하거나 이벤트를 처리하는 방법을 사용하여 동적인 인터페이스를 구현할 수 있습니다.

여기에 다양한 위젯을 사용하는 간단한 예제를 들어보겠습니다.

import tkinter as tk

def on_submit():
    entered_text = text_entry.get()
    text_display.insert(tk.END, f"{entered_text}\n")
    text_entry.delete(0, tk.END)

root = tk.Tk()
root.title("Tkinter Widgets Example")

frame1 = tk.Frame(root)
frame1.pack(pady=10)

text_entry = tk.Entry(frame1)
text_entry.pack(side=tk.LEFT)

submit_button = tk.Button(frame1, text="Submit", command=on_submit)
submit_button.pack(side=tk.LEFT)

frame2 = tk.Frame(root)
frame2.pack(pady=10)

text_display = tk.Text(frame2, wrap=tk.WORD, height=10, width=40)
text_display.pack()

root.mainloop()

이 예제에서는 Entry, Button, Text 위젯을 조합하여 사용자가 입력한 텍스트를 Text 위젯에 추가하는 간단한 인터페이스를 구성했습니다. 또한, Frame 위젯을 사용하여 위젯들을 그룹화하고, 팩 기하 관리자를 사용하여 위젯의 배치를 조절했습니다.

Tkinter를 사용하여 더 복잡한 인터페이스를 구현하려면, 위젯의 속성, 이벤트 처리, 기하 관리자 등에 대해 더 자세히 알아보세요. 이를 통해 사용자의 요구에 맞는 다양한 인터페이스를 구축할 수 있습니다.

 

Tkinter를 사용하여 좀 더 복잡한 인터페이스를 구축하기 위해 다음의 개념들에 대해 알아볼 필요가 있습니다.

변수 클래스 (StringVar, IntVar, DoubleVar, BooleanVar)
Tkinter 변수 클래스는 위젯 간에 데이터를 공유하고 동기화하는 데 유용합니다. 예를 들어, Entry 위젯의 텍스트를 Label 위젯과 동기화하려면 StringVar를 사용할 수 있습니다.

import tkinter as tk

root = tk.Tk()

text_var = tk.StringVar()

entry = tk.Entry(root, textvariable=text_var)
entry.pack()

label = tk.Label(root, textvariable=text_var)
label.pack()

root.mainloop()


이벤트 처리
Tkinter 이벤트 처리는 사용자가 키보드 키를 누르거나 마우스를 클릭하는 등의 동작에 반응하여 작동하는 애플리케이션을 구축하는 데 사용됩니다. 이벤트 처리를 위해 bind() 메서드를 사용하여 이벤트와 콜백 함수를 연결할 수 있습니다.

import tkinter as tk

def on_key_press(event):
    print(f"Key pressed: {event.char}")

root = tk.Tk()

root.bind("<KeyPress>", on_key_press)

root.mainloop()


기하 관리자
기하 관리자는 위젯을 루트 윈도우나 Frame 위젯에 배치하는 방법을 제어합니다. Tkinter는 pack(), grid(), place()와 같은 다양한 기하 관리자를 제공합니다. 이들을 사용하여 복잡한 레이아웃을 구성할 수 있습니다.

import tkinter as tk

root = tk.Tk()

label1 = tk.Label(root, text="Label 1")
label2 = tk.Label(root, text="Label 2")
label3 = tk.Label(root, text="Label 3")

label1.grid(row=0, column=0)
label2.grid(row=0, column=1)
label3.grid(row=1, column=0, columnspan=2)

root.mainloop()


사용자 정의 위젯
사용자 정의 위젯을 만들어 표준 Tkinter 위젯을 확장할 수 있습니다. 사용자 정의 위젯은 특정 목적에 맞게 동작하도록 구성된 클래스입니다.

import tkinter as tk

class CustomButton(tk.Button):
    def __init__(self, master=None, **kwargs):
        super().__init__(master, **kwargs)
        self["text"] = "Custom Button"
        self["command"] = self.print_message

    def print_message(self):
        print("This is a custom button!")

root = tk.Tk()

button = CustomButton(root)
button.pack()

root.mainloop()


위 예제들은 Tkinter를 사용하여 복잡한 인터페이스를 구축하는 데 필요한 기본 개념들을 보여줍니다. 이러한 개념을 응용하여 다양한 사용자 인터페이스를 구축할 수 있습니다. Tkinter를 사용하여 더 복잡한 인터페이스를 구현하려면, 다음과 같은 추가적인 고려사항이 있습니다.

메뉴와 서브메뉴
메뉴와 서브메뉴를 사용하여 응용 프로그램에 다양한 기능을 제공할 수 있습니다. Tkinter의 Menu 클래스를 사용하여 메뉴를 구현할 수 있습니다.

import tkinter as tk

def on_quit():
    root.destroy()

root = tk.Tk()

menubar = tk.Menu(root)
root.config(menu=menubar)

file_menu = tk.Menu(menubar)
menubar.add_cascade(label="File", menu=file_menu)

file_menu.add_command(label="Quit", command=on_quit)

root.mainloop()


대화상자
Tkinter는 사용자에게 정보를 요청하거나 경고 메시지를 표시하는 데 사용할 수 있는 여러 종류의 대화상자를 제공합니다. 예를 들어, 파일 열기 대화상자나 메시지 박스를 사용할 수 있습니다.

import tkinter as tk
from tkinter import filedialog, messagebox

def on_open_file():
    filepath = filedialog.askopenfilename()
    print(f"Selected file: {filepath}")

def on_show_message():
    messagebox.showinfo("Message", "This is an info message!")

root = tk.Tk()

open_button = tk.Button(root, text="Open File", command=on_open_file)
open_button.pack()

message_button = tk.Button(root, text="Show Message", command=on_show_message)
message_button.pack()

root.mainloop()


스타일링과 테마
Tkinter 애플리케이션의 외관을 사용자 지정하려면, ttk 모듈의 스타일 기능을 사용할 수 있습니다. 테마를 적용하고 위젯의 스타일 속성을 설정하여 애플리케이션의 외관을 변경할 수 있습니다.

import tkinter as tk
from tkinter import ttk

root = tk.Tk()

style = ttk.Style()
style.configure("TButton", font=("Arial", 14), background="blue")

button = ttk.Button(root, text="Styled Button")
button.pack()

root.mainloop()

 

이러한 고급 기능들을 익히고 적용하면, Tkinter를 사용하여 기능과 외관 모두 사용자가 원하는 대로 구성된 복잡한 인터페이스를 구축할 수 있습니다. 다양한 예제와 자습서를 통해 Tkinter에 대한 이해를 높이고, 다양한 프로젝트에 적용해보세요.

728x90

'Python for Beginners' 카테고리의 다른 글

12.4 기타 GUI 라이브러리(PyQt, Kivy 등)  (0) 2023.04.04
12.3 이벤트 처리  (0) 2023.04.04
12.1 Tkinter 소개  (0) 2023.04.04
11.3 비동기 프로그래밍  (0) 2023.04.01
11.2 멀티스레딩 및 멀티프로세싱  (0) 2023.04.01
Comments