Python GUI 프로그램 개발하기 기초: tkinter 라이브러리

Python 기본 GUI 라이브러리 tkinter

Python 에는 tkinter 란 이름의 표준 GUI 라이브러리가 존재한다. 이 라이브러리는 간단한 코드로 GUI 애플리케이션을 빠르게 개발할 수 있는 도구고 기본 적으로 포함 되어 있어 새로 설치하지 않아도 된다.

tkinter 기초 예시 코드

import tkinter as tk

def say_hello():
    label.config(text="Hello, World!")

app = tk.Tk()
app.title("GUI TEST")

label = tk.Label(app, text="클릭 버튼")
label.pack()

button = tk.Button(app, text="클릭해주세요.", command=say_hello)
button.pack()

app.mainloop()
Python
  • import tkinter as tk
    tkinter 라이브러리를 가져와 tk 라는 별칭으로 사용하는 코드다. 다른 라이브러리도 이와 같은 형태로 가져와 사용할 수 있다.
  • def say_hello():
    Python 에서 함수를 드는 키워드는 def 다. 이 코드로 함수 say_hello 를 선언하였다. 안의 label.config 는 label 객체의 텍스트를 “Hello, World” 로 바꾸며 label 객체는 아래에 선언되어 있다.
  • app = tk.Tk()
    Tk() 는 tkinter 라이브러리를 이용해 GUI 창을 출력할 객체를 선언하는 메서드다.
  • app.title(“GUI TEST”)
    title 메서드는 현재 만들 창의 제목을 설정한다. 이 코드는 GUI 창의 제목을 GUI TEST 로 설정한다.
  • label = tk.Label(app, text=”클릭 버튼”)
    Label 메서드는 레이블 위젯을 만들며 레이블 위젯이란 텍스트, 이미지를 표시하는 GUI 구성 요소다. HTML 의 <span> 등 태그를 이용해 텍스트 관련 요소를 만드는 것을 생각하면 편하다. 이 코드는 “클릭 버튼” 이란 이름을 지닌 텍스트 레이블 위젯을 아까 만든 app 창에 만드는 코드다.
  • label.pack()
    위에서 만든 레이블 위젯을 기본 창에 배치하는 코드다. .pack 은 간단하게 레이블 위젯을 창에 배치할 때 사용한다.
  • button = tk.Button(app, text=”클릭해주세요.”, command=say_hello)
    Label 메서드 처럼 Button 메서드는 창에 버튼을 만드는 메서드 로 HTML 의 <button>클릭해주세요.</button> 처럼 텍스트가 포함된 Button 이 출력되고 command 속성엔 버튼을 클릭할 시 동작할 함수를 지정한다. 위에서 만들었던 say_hello 가 버튼 클릭 시 실행 된다.
  • button.pack()
    레이블 위젯처럼 버튼을 창 안에 배치한다.
  • app.mainloop()
    이 코드는 Tkinter 애플리케이션의 메인 루프를 시작하는 것으로 창을 종료하기 까지 애플리케이션이 계속 실행 되도록 한다.

해당 코드를 작성 해 실행하면 다음과 같은 작은 창이 출력 되어야 한다. 그리고 버튼을 클릭하면 텍스트가 Hello, World! 로 수정된다.

tkinter 기초 예시 코드 실행 결과

tkinter 기본 요소(위젯) 목록

tkinter 는 다른 GUI 에서도 자주 사용 되는 텍스트 상자, 체크박스, 라디오 버튼 등의 기본 요소들을 구현할 수 있다.

레이블 (Label)

텍스트, 이미지를 표시하는 위젯. 위에서도 사용했으며 단순하게 텍스트를 출력할 수 있다.

label = tk.Label(app, text="표시할 텍스트")
label.pack()
Python
레이블 (Label)

버튼 (Button)

사용자가 누를 수 있는 버튼 위젯. 위에서도 사용했으며 버튼에 표시될 텍스트와 command 속성으로 실행 될 함수를 지정할 수 있다.

button = tk.Button(app, text="버튼 텍스트", command=callback_function)
button.pack()
Python
버튼 (Button)

입력 필드 (Entry)

텍스트를 입력할 수 있는 입력 상자 위젯으로 HTML 의 <input type=”text”> 태그와 역할이 같다.

entry = tk.Entry(app)
entry.pack()
Python
입력 필드 (Entry)

텍스트 상자 (Text)

여러 행의 텍스트를 입력할 수 있는 위젯으로 HTML 의 <textarea> 태그와 역할이 같다.

text = tk.Text(app)
text.pack()
Python
텍스트 상자 (Text)

체크 버튼 (Checkbutton)

체크를 할 수 있는 버튼 즉 체크박스 형태의 위젯으로 HTML 의 <input type=”checkbox”> 와 역할이 같다.

checkbutton = tk.Checkbutton(app, text="Check me")
checkbutton.pack()
Python
체크 버튼 (Checkbutton)

라디오 버튼 (Radiobutton)

여러 옵션 중 하나를 선택하는 라디오 버튼 위젯으로 HTML 의 <input type=”radio”> 와 역할이 같다.

다른 위젯과 달리 여러 옵션 중 하나를 선택해야 하므로 두 개 이상의 라디오 버튼을 작성에 하나의 쌍이 되게 하 동작한다.

radiobutton1 = tk.Radiobutton(app, text="Option 1", value=1)
radiobutton2 = tk.Radiobutton(app, text="Option 2", value=2)
radiobutton1.pack()
radiobutton2.pack()
Python
라디오 버튼 (Radiobutton)

리스트 박스 (Listbox)

여러 라인의 선택 가능한 리스트를 출력하는 위젯이다.

listbox = tk.Listbox(app)
listbox.insert(1, "Item 1")
listbox.insert(2, "Item 2")
listbox.pack()
Python
리스트 박스 (Listbox)

슬라이더 (Scale)

스크롤 바로 알려진 형태의 사용자가 드래그 하여 값을 선택할 수 있는 위젯이다. 위 아래로 움직여 숫자 값을 선택할 수 있는데 예시로 볼륨 조절 버튼의 형태를 지녔다.

scale = tk.Scale(app, from_=0, to=100)
scale.pack()
Python
슬라이더 (Scale)

스핀박스 (Spinbox)

특정 범위 내에서 값을 선택할 수 있는 위젯으로 위, 아래로 값을 증감 시키는 버튼이 함께 제공 된다.

스핀박스 (Spinbox)

메뉴 (Menu)

상단의 메뉴를 생성하는 위젯이다.

menu = tk.Menu(app)
app.config(menu=menu)
submenu = tk.Menu(menu)
menu.add_cascade(label="File", menu=submenu)
submenu.add_command(label="New File")
submenu.add_command(label="Open...")
submenu.add_command(label="Save")
Python
메뉴 (Menu)

캔버스 (Canvas)

그래픽을 그리기 위한 위젯으로 아래의 코드는 가운데 파란 네모 상자를 표시한다.

canvas = tk.Canvas(app, width=200, height=100)
canvas.pack()
canvas.create_line(0, 0, 200, 100)
canvas.create_rectangle(50, 25, 150, 75, fill="blue")
Python

그 외에 여러가지 위젯을 그룹화 하는 프레임 (Frame) 등이 있다.

0 0 votes
Article Rating
Subscribe
Notify of
guest
0 Comments
Oldest
Newest Most Voted
Inline Feedbacks
View all comments
0
Would love your thoughts, please comment.x
()
x
목차
위로 스크롤