1. Tkinter 알아보기
- 파이썬에서 GUI(Graphical User Interface) 애플리케이션을 개발하기 위한 표준 라이브러리
- Tk GUI 툴킷의 파이썬 인터페이스이며, 여러 가지 위젯과 도구를 사용하여 사용자 인터페이스를 만들 수 있음
- 파이썬 표준 라이브러리에 이미 포함 (별도의 설치 필요 X)
2. 위젯이란?
- 윈도우와 같은 GUI 기반 운영체제에서 많이 사용하는 각종 시각적인 요소
3. tkinter 예제
from tkinter import * #tkinter 라이브러리에서 모든 클래스, 함수, 변수들을 포함
root = Tk() # 윈도우 생성
root.geometry("300x200") # 창의 크기 설정
label = Label(root, text="Hello, World!") # 레이블 위젯 생성
label.pack() # 레이블 배치
root.mainloop() # 이벤트 루프 시작
3-1 예제 설명
- from tkinter import * : tkinter 라이브러리에서 모든 클래스, 함수, 변수들을 포함시킨다. 이렇게 하면 tkinter의 클래스, 함수 및 상수를 직접 사용할 수 있다.
- root = Tk() : 제일 먼저 루트 윈도우를 생성하여야 한다. tkinter 모듈 안에 있는 Tk 클래스는 제목을 가지고 있는 일반적인 윈도우이다. Tk 클래스의 객체를 생성하면 화면에 하나의 윈도우가 생성된다.
- root.geometry("300x200") : 이 문장은 윈도우의 크기를 300×200으로 설정한다.
- label = Label(root, text="Hello, world!") : 레이블(Label) 클래스를 사용하여 텍스트 레이블 위젯을 생성한다.
- label.pack() : 위젯에 대하여 pack() 메소드가 호출된다. pack()은 텍스트를 표시할 정
도로만 위젯의 크기를 축소하라는 의미이다. pack()이 호출되어야 위젯이
화면에 나타난다.
- root.mainloop() : 이벤트 루프는 사용자로부터 오는 마우스나 키보드 이벤트 뿐만 아니라 윈도우 시스템에서 오는 여러 가지 이벤트도 함께 처리한다
4. 컨테이너 위젯과 단순 위젯
- 단순 위젯 : 단순한 위젯으로 Button, Canvas, Checkbutton, Entry, Label, Message 등이 여기에 속함
- 컨테이너 : 다른 컴포넌트를 안에 포함할 수 있는 컴포넌트로서 Frame, Toplevel, LabelFrame, Panedroot 등이 여기에 속함
5. 레이블
- 레이블 위젯 : 텍스트나 이미지를 표시하는데 사용
Tkinter 라이브러리에서 제공하는 Label 클래스를 사용하여 생성
from tkinter import *
root = Tk()
Label(root,
text="Times Font 폰트와 빨강색을 사용한다. ",
fg = "red",
font = "Times 32 bold italic").pack()
Label(root,
text="Helvetica 폰트와 녹색을 사용한다. ",
fg = "blue",
bg = "yellow",
font = "Helvetica 32 bold italic").pack()
root.mainloop()
5-1 이미지 표시 레이블
- PhotoImage 클래스를 이용해 이미지 읽기
- 레이블 생성 시 매개변수 image를 통하여 전달
from tkinter import *
root = Tk()
photo = PhotoImage(file="dog2.gif")
label = Label(root, image=photo)
label.pack()
root.mainloop()
※ 따옴표 3개(""")를 치면 엔터한 텍스트도 엔터 포함해서 출력
6. 버튼
- 사용자와 상호작용을 할 목적으로 설계된 위젯
- 클릭할 때마다 함수를 호출하도록 구성 가능
from tkinter import *
def button_clicked():
print("버튼이 클릭되었습니다!")
root = Tk() # 부모 위젯 생성
root.geometry("300x200")
button = Button(root, text="클릭하세요", command=button_clicked) # 버튼 위젯 생성
button.pack() # 버튼 위젯 배치
root.mainloop() # 이벤트 루프 시작
7. 엔트리
- 사용자로부터 한 줄의 텍스트를 가져와야 하는 경우 사용
from tkinter import *
def get_entry_value():
value = entry.get()
print("입력된 값:", value)
root = Tk() # 부모 위젯 생성
root.geometry("300x200")
entry = Entry(root) # 엔트리 위젯 생성
entry.pack() # 엔트리 위젯 배치
button = Button(root, text="확인", command=get_entry_value) # 버튼 위젯 생성
button.pack() # 버튼 위젯 배치
root.mainloop() # 이벤트 루프 시작
8. 텍스트위젯
- 멀티 라인 텍스트 입력을 위한 위젯
- 텍스트 표시, 편집 기능 제공
from tkinter import *
def display_text():
text = text_widget.get("1.0", END) #"1.0"은 첫 번째 줄(1)의 첫 번째 문자열 위치(0)를, END는 텍스트의 끝 위치를 나타낸다
print("입력된 정보:") #따라서 ("1.0", END)는 모든 텍스트를 호출한다
print(text)
root = Tk()
# 텍스트 위젯
text_widget = Text(root, width=60, height=10)
text_widget.pack()
# 출력 버튼
button = Button(root, text="출력", command=display_text)
button.pack()
root.mainloop()
9. 라디오 버튼
- 그룹 안에서 한개의 버튼만 선택 가능
from tkinter import *
root = Tk()
choice = IntVar()
Label(root,
text="가장 선호하는 프로그래밍 언어를 선택하시오",
justify = LEFT,
padx = 20).pack()
Radiobutton(root, text="Python", padx = 20, variable=choice,
value=1).pack(anchor=W)
Radiobutton(root, text="C", padx = 20, variable=choice,
value=2).pack(anchor=W)
Radiobutton(root, text="Java", padx = 20, variable=choice,
value=3).pack(anchor=W)
Radiobutton(root, text="Swift", padx = 20, variable=choice,
value=4).pack(anchor=W)
root.mainloop()
10. 체크박스
- 사용자가 클릭하여서 체크된 상태와 체크되지 않은 상태 중의 하나로 만들 수 있는 위젯 (그룹 안에서 여러개 선택 가능)
from tkinter import *
root = Tk()
Label(root, text="선호하는 언어를 모두 선택하시오:").grid(row=0, sticky=W)
value1 = IntVar() #IntVar는 정수값을 저장하는데 사용됨
Checkbutton(root, text="Python", variable=value1).grid(row=1, sticky=W)
value2 = IntVar()
Checkbutton(root, text="C", variable=value2).grid(row=2, sticky=W)
value3 = IntVar()
Checkbutton(root, text="Java", variable=value3).grid(row=3, sticky=W)
value4 = IntVar()
Checkbutton(root, text="Swift", variable=value4).grid(row=4, sticky=W)
root.mainloop()
11. 리스트박스 위젯
- 사용자가 선택할 수 있는 항목들을 메뉴로 보여줌
from tkinter import *
root = Tk()
lb = Listbox(root, height=4)
lb.pack()
lb.insert(END,"Python")
lb.insert(END,"C")
lb.insert(END,"Java")
lb.insert(END,"Swift")
root.mainloop()
12. 프레임 위젯
- 다른 위젯을 담을 수 있는 컨테이너 역할
from tkinter import *
root = Tk() # 부모 위젯 생성
root.geometry("300x200")
frame = Frame(root, width=200, height=100) # Frame 위젯 생성
frame.pack() # Frame 위젯 배치
button1 = Button(frame, text="버튼 1") # 버튼 1
button1.pack(side="left")
button2 = Button(frame, text="버튼 2") # 버튼 2
button2.pack(side="left")
root.mainloop() # 이벤트 루프 시작
13. 배치관리자
13-1 Pack 배치 관리자
- pack() : 위젯을 배치
- (side = " ") : 위젯의 배치 방향 지정
rom tkinter import *
root = Tk()
root.geometry("300x100")
button1 = Button(root, text="버튼 1", bg="red", fg="white")
button2 = Button(root, text="버튼 2", bg="green", fg="black")
button3 = Button(root, text="버튼 3", bg="blue", fg="white")
button1.pack()
button2.pack()
button3.pack()
root.mainloop()
button1.pack(side=LEFT, padx=10) #padx는 왼쪽 및 오른쪽에 픽셀을 추가함
button2.pack(side=LEFT, padx=10)
button3.pack(side=LEFT, padx=10)
13-2 Grid 배치 관리자
- grid() :위젯을 표 그리드 형식으로 배치
- 행(row) 및 열(column)을 사용하여 위젯의 위치를 지정
from tkinter import *
root = Tk()
root.geometry("300x100")
button1 = Button(root, text="버튼 1", bg="red", fg="white")
button1.grid(row=0, column=0)
button2 = Button(root, text="버튼 2", bg="green", fg="black")
button2.grid(row=0, column=1)
button3 = Button(root, text="버튼 3", bg="blue", fg="white")
button3.grid(row=1, column=0)
button4 = Button(root, text="버튼 4", bg="yellow", fg="red")
button4.grid(row=1, column=1)
root.mainloop()
13-3 Place 배치 관리자
- place() : 위젯을 직접적으로 위치
- 위젯의 절대 좌표(x, y)를 사용하여 위치 지정
from tkinter import *
root = Tk()
root.geometry("300x100")
button1 = Button(root, text="버튼 1", bg="red", fg="white")
button1.place(x=0, y=0)
button2 = Button(root, text="버튼 2", bg="green", fg="black")
button2.place(x=30, y=30)
button3 = Button(root, text="버튼 3", bg="blue", fg="white")
button3.place(x=60, y=60)
root.mainloop()
14. 이벤트 처리
- 콜백함수 : 이벤트가 발생하였을 때 호출되는 함수
14-1 버튼 클릭 이벤트
- 마우스로 버튼을 클릭했을 때 발생하는 이벤트
from tkinter import *
def callback():
"""
콜백 함수: 버튼이 클릭되면 호출되어 버튼의 텍스트를 변경한다.
"""
button["text"] = "버튼이 클릭되었음!"
# Tkinter 윈도우 생성
root = Tk()
# 버튼 생성 및 콜백 함수와 연결
button = Button(root, text="클릭", command=callback)
button.pack(side=LEFT) # 버튼을 윈도우에 팩 배치
root.mainloop() # Tkinter 이벤트 루프 실행
14-2 마우스 이벤트
- 마우스 동작에 대한 이벤트로, 클릭, 이동, 드래그 등을 다룸
from tkinter import *
def left_click(event):
print(f"좌측 버튼이 ({event.x},{event.x})에서 클릭되었습니다.")
def right_click(event):
print(f"우측 버튼이 ({event.x},{event.x})에서 클릭되었습니다.")
root = Tk()
frame = Frame(root, width=200, height=200)
frame.bind("<Button-1>", left_click)
frame.bind("<Button-3>", right_click)
frame.pack()
root.mainloop()
14-3 키보드 이벤트
- 키보드로 키를 입력했을 때 발생하는 이벤트
from tkinter import *
def key_press(event):
print("키가 눌렸습니다:", event.keysym)
root = Tk()
root.geometry("200x200")
root.bind("<Key>", key_press)
root.focus_set()
root.mainloop()
15. 색상
배경(bg)와 전경(fg) 변수를 사용하여 위젯 및 텍스트 색상 지정 가능
button["fg"] = "yellow"
15-1 askcolor()
- tkinter.colorchooser 모듈의 askcolor()를 호출하면 대화상자를 통하여 색상의 값을 입력받을 수 있음
import tkinter as tk
from tkinter import colorchooser
color = colorchooser.askcolor(title="색상 선택")
print(color)
16. 폰트
- 튜플로 지정 가능 --> (폰트 이름, 폰트 크기, 폰트 스타일)
("Times", 10, "bold")
("Helvetica", 10, "bold italic")
("Symbol", 8)
w = Label(master, text="Helvetica", font=("Helvetica", 16))
17. 캔버스 위젯
- 도형, 텍스트, 이미지 등 다양한 그래픽 요소를 그리는 함수
from tkinter import *
#Tkinter 윈도우 생성
root = Tk()
#Canvas생성 및 크기 설정
w = Canvas(root, width=300, height=200)
w.pack()
#Tkinter 이벤트 루프 실행
root.mainloop()
'Python' 카테고리의 다른 글
[Python] 시퀀스 - 문자열(string) (0) | 2024.06.14 |
---|---|
[Python] 시퀀스 - 딕셔너리(dictionary) (0) | 2024.06.14 |
[Python] 시퀀스 - 세트(set) (0) | 2024.06.14 |
[Python] 시퀀스 - 튜플(tuple) (1) | 2024.06.14 |
[Python] 기본 함수 (0) | 2024.04.21 |