파이썬(Python)에서 GUI 프로그램을 만들기 위해 다양한 라이브러리들이 존재한다. 그중에서도 완성도 있고 사용하기 쉬운 tkinter 라이브러리가 있다. tkinter 의 컨셉 및 사용법에 간단히 알아보고 예제를 통해 쉽게 이해하도록 해보자.
tkinter란?
tkinter는 Tcl/TK GUI 툴킷을 사용하기 위한 파이썬 라이브러리이다. tkinter는 윈도우, MacOS, 대부분의 Unix 에서 사용가능하다.
Tcl 이란?
Tool Command Language 의 약자로 인터프리터 언어이다. Tk 툴킷과의 인터페이스 역할을 할 수 있다.
Tk 란?
GUI 위젯을 만들기 위한 Tcl 패키지.
파이썬에서 tkinter 모듈을 이용하여 Tcl/Tk GUI 위젯을 만들고 사용할 수 있다.
Tk 컨셉
Tk에서 GUI를 구현하는 기본적인 컨셉은 위젯(Widget)이다. 위젯을 만들고 배치하고 이벤트를 처리하는 것이 전부다.
Widget
Tk에서 모든 것은 위젯으로 구성된다. 버튼이나 체크박스 같은 모든 UI가 모두 하나의 위젯이다. 심지어 윈도우조차도 위젯이다.
Tk를 이용하여 윈도우에 UI를 배치하면 모든 위젯이 계층 구조를 가지게 된다. 최상단의 root windows 부터 시작하여 다른 위젯을 자식 노드로 가지는 계층구조로 이루어진다.
Geometry Management
위젯을 화면에 배치시키고 보여지게 하는 역할을 한다.
grid 라는 함수를 이용한다.
Event Handling
이벤트 루프를 통해 이벤트를 처리하는 방식이다.
콜백 방식으로 처리
위젯에 정의되지 않은 이벤트를 처리하기 위해 bind를 사용하여 이벤트를 처리할 수 있음
가상 이벤트: 복사, 붙여넣기 등과 같은 이벤트 또는 사용자 정의 이벤트
tkinter 시작하기
간단한 예제로 버튼이 하나 있는 윈도우를 생성하는 python 코드를 만들어보자.
from tkinter import *
from tkinter import ttk
root = Tk()
root.title("First tkinter")
frame = ttk.Frame(root, width=640, height=320).grid()
ttk.Button(frame, text="Hello World").grid(column=0, row=0)
root.mainloop()
위 코드를 실행하면 아래와 같이 가운데 버튼이 하나 있는 윈도우가 생성된다.
위 코드의 원리를 간단히 알아보자.
모듈 임포트
from tkinter import *
from tkinter import ttk
tkinter 모듈을 사용하기 위해 가장 먼저 import를 해야한다. 2가지를 import한다.
- 메인 tkinter 모듈
- tkinter.ttk 모듈: Tk 테마 위젯
메인 tkinter에도 위젯이 있지만 최신 버전에서는 ttk 위젯을 사용하도록 하자.
Tk 테마 위젯
Tk 8.5에 도입되었으며, 위젯의 동작과 스타일에 대한 코드가 분리될 수 있도록 하는 컨셉이다.
미리 정의된 테마로 쉽게 바꿀수 있으며, 또는 사용자 정의 스타일을 만들 수 있다.
윈도우 생성
root = Tk()
root.title("First tkinter")
Tk 인스턴스를 만들고 초기화한 후에 윈도우를 만든다. 이 윈도우가 위젯 계층구조에서 루트 노드가 되는 객체이다.
Frame 생성
frame = ttk.Frame(root, width=640, height=320).grid()
프레임 위젯을 생성한다. 프레임 위젯은 루트 윈도우의 자식 노드로 생성하며, 프레임 안에 다양한 위젯을 넣게 될 것이다.
Button 생성
ttk.Button(frame, text="Hello World").grid(column=0, row=0)
프레임 위젯 내부에 버튼을 하나 생성한다. 모든 위젯은 생성시에 부모 위젯을 지정하여 주도록 되어있다.
화면 출력
root.mainloop()
mainloop 함수는 만들어진 위젯을 화면에서 보이고 사용자 입력에 반응하도록 만들어준다.
ttk 위젯 종류
- Button
- Checkbutton
- Entry
- Frame
- Label
- LabelFrame
- Menubutton
- PanedWindow
- Radiobutton
- Scale
- Scrollbar
- Spinbox
- Combobox
- Notebook
- Progressbar
- Separator
- Sizegrip
- Treeview
'개발' 카테고리의 다른 글
Kivy MatrixInstruction을 이용한 원근 변환 문제 및 해결법 (0) | 2024.08.19 |
---|---|
파이썬 Kivy: weakly-referenced object no longer exists 예외 상황 (0) | 2024.08.14 |
Python 한번에 배우기 - 필수 문법 요약 정리 (0) | 2024.01.23 |
내컴퓨터에 워드프레스 설치 후 마음껏 테스트해보기 (3) | 2023.08.26 |
Nuxt3 + Vuetify SASS Variable 수정하기 (1) | 2023.06.30 |
댓글