플그래밍/파이써언

[파이썬] 내가 공부하려고 만든 Tkinter 투토리얼

훗티v 2023. 2. 18. 03:22
728x90
반응형

Python Tkinter

Tkinter란?

Tkinter는 그래픽 사용자 인터페이스(GUI)를 만들기 위한 표준 Python 라이브러리입니다. 그래픽 인터페이스를 만들기 위한 도구와 위젯의 집합인 Tk 툴킷을 기반으로 하며, Python 애플리케이션을 위한 창, 대화 상자, 버튼, 레이블 및 기타 위젯을 간단하게 만들 수 있는 방법을 제공합니다.

 

다음은 Tkinter의 몇 가지 주요 기능입니다.

크로스 플랫폼: Tkinter는 Windows, macOS, Linux를 포함한 대부분의 운영 체제에서 사용할 수 있습니다.

배우기 쉽다: Tkinter는 비교적 간단하고 배우기 쉬운 라이브러리이기 때문에 초보자에게 좋은 선택입니다.

사용자 정의 가능: Tkinter는 필요에 맞게 사용자 정의할 수 있는 다양한 내장 위젯을 제공합니다.

이벤트 기반 프로그래밍 지원: Tkinter는 이벤트 중심 프로그래밍을 지원하므로 버튼 클릭, 마우스 움직임, 키보드 입력과 같은 사용자 이벤트에 반응하는 GUI를 만들 수 있습니다.

다른 파이썬 라이브러리와의 통합: Tkinter는 NumPy, Pandas, Matplotlib 등 다른 Python 라이브러리와 쉽게 통합하여 강력한 데이터 시각화 애플리케이션을 만들 수 있습니다.

 

Tkinter 설치하기

Tkinter는 파이썬의 표준 라이브러리에 포함되어 있으므로 파이썬을 설치했다면 컴퓨터에 이미 설치되어 있을 것입니다. 시스템에 Tkinter가 설치되어 있는지 확인하려면 Python Shell 또는 터미널을 열고 다음 명령을 입력하면 됩니다:

import tkinter

오류 메시지가 없으면 Tkinter가 설치되어 사용할 준비가 된 것입니다.
Tkinter가 설치되어 있지 않은 경우 운영 체제의 패키지 관리자를 사용하거나 소스에서 설치하여 설치할 수 있습니다. 

 

다음은 다양한 운영 체제에 Tkinter를 설치하기 위한 몇 가지 지침입니다:

 

Windows

Tkinter는 Windows의 표준 파이썬 배포에 포함되어 있어야 합니다. 다른 배포판을 사용하는 경우 명령 프롬프트 또는 PowerShell을 사용하여 다음 명령으로 설치할 수 있습니다:

python -m pip install tkinter

 

macOS

Tkinter는 macOS의 표준 Python 배포판에 포함되어 있어야 합니다. 다른 배포판을 사용하는 경우 터미널에서 다음 명령을 사용하여 설치할 수 있습니다:

python -m pip install tkinter

 

Linux

Tkinter는 Linux의 표준 Python 배포에 포함되어 있는 경우가 많습니다. 설치되어 있지 않은 경우 패키지 관리자를 사용하여 설치할 수 있습니다. 예를 들어 우분투나 데비안에서는 다음 명령을 사용할 수 있습니다:

sudo apt-get install python3-tk

 

기본 Tkinter 창 만들기

기본 Tkinter 창을 만들려면 Tkinter 모듈을 임포트하고 기본 창 객체를 만들어야 합니다. 다음은 제목과 크기가 있는 간단한 창을 만드는 코드입니다:

import tkinter as tk

root = tk.Tk()
root.title("내 첫번째 tkinter 창")
root.geometry("300x300")

root.mainloop()


1  |  tkinter 모듈을 임포트하고 편의를 위해 tk로 지정합니다.
2  |  Tk() 생성자를 사용하여 새 기본 창 객체를 생성하고 이를 변수 root에 할당합니다.
3  |  title() 메서드를 사용하여 창의 제목을 "내 첫번째 tkinter 창"으로 설정합니다.
4  |  geometry() 메서드를 사용하여 창의 크기를 너비 300픽셀, 높이 300픽셀로 설정합니다.
5  |  mainloop() 메서드를 사용하여 창의 메인 이벤트 루프를 시작합니다. 이 메서드는 사용자 이벤트를 수신하고 필요에 따라 창 표시를 업데이트합니다.

 

이 코드를 실행하면 화면에 "내 첫번째 tkinter 창"이라는 제목과 300x300픽셀 크기의 창이 나타납니다. 닫기 버튼(X)을 클릭하여  창을 닫을 수 있습니다.

 

 

Tkinter 위젯

Label 위젯

Label 위젯은 Tkinter에서 가장 일반적으로 사용되는 위젯 중 하나입니다. 창이나 프레임에 텍스트나 이미지를 표시하는 데 사용됩니다. Tkinter의 Label 클래스를 사용하여 Label 위젯을 만들 수 있습니다.

 

다음은 텍스트가 포함된 레이블 위젯을 만들어 창에 추가하는 예제 코드입니다:

import tkinter as tk

root = tk.Tk()
root.geometry("300x300")

label = tk.Label(root, text="헬로, 월드!")
label.pack()

root.mainloop()

1, 2  |  이전과 동일하게 새 메인 창 객체를 만들고 크기를 설정합니다.
3  |  Label 생성자를 사용하여 새 레이블 위젯을 생성하고 이를 변수 레이블에 할당합니다. text 매개변수는 레이블에 표시할 텍스트를 설정합니다.
4  |  pack() 메서드를 사용하여 레이블 위젯을 창에 추가합니다. pack() 메서드는 기본 레이아웃을 사용하여 창에 위젯을 정렬하는데, 이 경우 위젯을 창 중앙에 배치합니다.

이 코드를 실행하면 창 중앙에 "Hello, World!"라는 레이블이 있는 창이 나타납니다.

 

이번에는 이미지를 출력하는 레이블 위젯을 만드는 예제입니다:

import tkinter as tk
from PIL import ImageTk, Image

root = tk.Tk()
root.geometry("300x300")

image = Image.open("hoood.jpg").resize((280,280))
photo = ImageTk.PhotoImage(image)
label = tk.Label(root, image=photo)
label.pack(padx=10, pady=10)

root.mainloop()

이 예제에서는 먼저 이미지를 로드하고 표시할 수 있게 해주는 파이썬 이미징 라이브러리(PIL)에서 ImageTkImage 모듈을 가져옵니다. 그런 다음 Image.open() 메서드를 사용하여 이미지 파일을 열고 ImageTk.PhotoImage() 생성자를 사용하여 PhotoImage 객체를 만듭니다. 마지막으로 이미지 매개 변수가 PhotoImage 객체로 설정된 새 레이블 위젯을 생성하고 pack() 메서드를 사용하여 창에 위젯을 추가합니다.

 

Python 실행파일과 동일한 디렉터리에 "hoood.jpg"라는 이름의 이미지 파일이 존재할 경우, 실행시 창 중앙에 이미지가 표시된 창이 나타납니다.

 

Button 위젯

Python Tkinter의 버튼 위젯은 사용자가 클릭했을 때 작업을 수행할 수 있는 그래픽 요소입니다. 일반적으로 사용자가 클릭할 때 특정 기능이나 이벤트를 트리거하는 데 사용됩니다.

다음은 Tkinter의 기본 버튼 위젯의 예시입니다:

import tkinter as tk

root = tk.Tk()

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

root.mainloop()

위 예제에서는 tkinter 모듈의 Button 클래스를 사용하여 버튼 위젯을 만듭니다. 루트 창을 첫 번째 인수로 전달하고 텍스트 매개변수를 사용하여 버튼의 텍스트를 "클릭해보세요!"로 설정합니다. 마지막으로 버튼의 pack() 메서드를 호출하여 창에 추가합니다.


사용자가 버튼을 클릭하면 기본적으로 아무 동작도 수행하지 않습니다. 액션을 추가하려면 버튼의 명령 매개변수에 함수를 전달하면 됩니다. 다음은 예시입니다:

import tkinter as tk

root = tk.Tk()

def on_button_click():
    label = tk.Label(root, text="클릭하셨네요?")
    label.pack()

button = tk.Button(root, text="클릭하세요!", command=on_button_click)
button.pack()

root.geometry("300x200")
root.mainloop()

1  |  tkinter를 tk로 임포트합니다: 이 줄은 tkinter 모듈을 가져와서 별칭 tk를 지정합니다.
2  |  root = tk.Tk(): 이 줄은 GUI의 기본 창을 나타내는 새 Tk 객체를 생성합니다.
3  |  def on_button_click():: 이 줄은 on_button_click()이라는 새 함수를 정의합니다. 이 함수는 버튼을 클릭할 때 호출됩니다.
4  |  label = tk.Label(root, text="클릭하셨네요?"): 이 줄은 "클릭하셨네요?"라는 텍스트가 포함된 새 레이블 위젯을 생성하여 기본 창 루트에 첨부합니다.
5  |  label.pack(): 이 줄은 라벨 위젯을 메인 창에 패킹하여 GUI에 표시되도록 합니다.
6  |  button = tk.Button(root, text="클릭하세요!", command=on_button_click): 이 줄은 "클릭하세요!"라는 텍스트가 포함된 새 버튼 위젯을 생성하여 기본 창 루트에 첨부합니다. 명령 매개변수는 on_button_click 함수로 설정되어 있으므로 버튼을 클릭하면 함수가 호출됩니다.
7  |  button.pack(): 이 줄은 버튼 위젯을 메인 창에 패킹하여 GUI에 표시되도록 합니다.
8  |  root.geometry("300x200"): 이 줄은 메인 창의 크기를 너비 300픽셀, 높이 200픽셀로 설정합니다.
9  |  root.mainloop(): 이 줄은 GUI 창을 표시하고 사용자 입력을 처리하는 데 필요한 GUI 이벤트 루프를 시작합니다. 사용자가 창을 닫거나 프로그램을 종료할 때까지 프로그램이 계속 실행됩니다.

 

Entry(입력) 위젯

tkinter에서 입력 위젯은 사용자가 한 줄의 텍스트나 비밀번호 등의 텍스트 입력을 입력할 수 있는 GUI 구성 요소입니다. 사용자가 위젯에 입력하면 입력하는 대로 텍스트가 표시됩니다. 사용자는 입력한 텍스트를 수정하거나 삭제할 수도 있습니다. 입력 위젯에 입력한 텍스트는 프로그램에서 검색하여 문자열로 사용할 수 있습니다.

다음은 tkinter에서 항목 위젯을 만드는 방법의 예입니다:

import tkinter as tk

root = tk.Tk()

# 입력 위젯 만들기
entry_widget = tk.Entry(root)
entry_widget.pack(padx=10, pady=10)

root.geometry("300x100")
root.mainloop()

이 코드는 항목 위젯이 있는 간단한 창을 생성합니다. 사용자는 위젯에 텍스트를 입력할 수 있지만 프로그램은 텍스트로 아무 작업도 수행하지 않습니다.

다음은 버튼을 클릭할 때 위젯에 입력된 텍스트를 가져오는 방법을 보여주는 또 다른 예입니다:

import tkinter as tk

root = tk.Tk()

def on_button_click():
    # 입력 위젯에서 문자열 가져오기
    text = entry_widget.get()
    print("사용자 입력:", text)

# 입력 위젯 만들기
entry_widget = tk.Entry(root)
entry_widget.pack(pady=20)

# 문자열을 추출하는 버튼 만들기
button = tk.Button(root, text="문자열 추출", command=on_button_click)
button.pack()

root.geometry("300x100")
root.mainloop()

이 코드는 엔트리 위젯과 버튼을 생성합니다. 버튼을 클릭하면 on_button_click 함수가 Entry 위젯에서 텍스트를 검색하여 콘솔에 인쇄합니다. Entry 위젯의 get() 메서드는 위젯에 입력된 텍스트를 검색하는 데 사용됩니다.

 

Text 위젯

아래 예제에서는 먼저 tkinter 모듈을 임포트하고 Tk 클래스를 사용하여 새 창을 만듭니다. 그런 다음 초기 높이가 14줄, 너비가 40자인 텍스트 위젯을 만듭니다. 삽입 메서드를 사용하여 위젯에 텍스트를 추가합니다. 삽입 메서드는 텍스트를 삽입할 위치(이 경우 위젯의 끝을 의미하는 tk.END)와 삽입할 텍스트의 두 가지 인수를 받습니다.

마지막으로, 창에 위젯을 배치하는 팩 메서드를 사용하여 창에 텍스트 위젯을 추가합니다. 그런 다음 윈도우의 메인루프 메서드를 사용하여 이벤트 루프를 시작하여 사용자가 애플리케이션과 상호 작용할 수 있도록 합니다.

전반적으로 텍스트 위젯은 파이썬 GUI 애플리케이션에서 텍스트를 표시하고 편집할 수 있는 다재다능하고 강력한 도구입니다. 텍스트 편집기부터 채팅 애플리케이션 등 다양한 애플리케이션에 사용할 수 있습니다.

import tkinter as tk

root = tk.Tk()

# 텍스트 위젯 & 디폴트 텍스트
text_widget = tk.Text(root, height=14, width=40)
text_widget.insert(tk.END, "텍스트위젯 입니다.\n")
text_widget.insert(tk.END, "텍스트를 추가 및 수정 하실 수 있어요.\n")

# 윈도우에 텍스트 위젯 추가
text_widget.pack(pady=5)

# 이벤트 룹 실행
root.title("텍스트 위젯")
root.geometry("300x200")
root.mainloop()

 

Frame 위젯

Python의 tkinter 모듈에 있는 프레임 위젯은 다른 위젯을 그룹화하고 구성하는 데 사용되는 화면의 직사각형 영역입니다. 기본적으로 버튼, 레이블, 텍스트 위젯 등과 같은 다른 위젯을 담을 수 있는 컨테이너 위젯입니다.

프레임은 종종 GUI 애플리케이션에서 관련 위젯을 함께 그룹화하고 애플리케이션의 여러 섹션을 시각적으로 구분하는 데 사용됩니다. 또한 복잡한 레이아웃을 만들고 프레임 내에서 위젯을 서로 상대적으로 배치하는 데에도 사용할 수 있습니다.

import tkinter as tk

root = tk.Tk()

# gold색 바탕의 프레임 위젯 생성
frame = tk.Frame(root, bg="gold", width=280, height=80)

# 프레임에 레이블 위젯 추가
label = tk.Label(frame, text="프레임 위젯입니다.", font=("Dotum", 11, 'bold'), fg="black", bg="orange")
label.pack(padx=20, pady=20)

# 프레임에 버튼 위젯 추가
button = tk.Button(frame, text="클릭 버튼", font=("Dotum", 10))
button.pack(padx=10, pady=10)

# 윈도우에 프레임 추가
frame.pack(padx=20, pady=20)

# 이벤트 룹 실행
root.geometry("300x150")
root.mainloop()

import tkinter as tk: tkinter 모듈을 가져와서 별칭 tk를 할당합니다.
root = tk.Tk(): tkinter 모듈의 Tk() 생성자 메서드를 사용하여 새 창을 생성하고 변수 root에 할당합니다. 이 창은 애플리케이션의 다른 모든 위젯에 대한 부모 컨테이너 역할을 합니다.
frame = tk.Frame(root, bg="gold", width=280, height=80): 배경색은 노란색, 너비는 280픽셀, 높이는 80픽셀인 Frame 위젯을 만듭니다. 이 프레임은 루트 창의 자식이 되어 애플리케이션의 다른 위젯을 보유하게 됩니다.
label = tk.Label(frame, text="프레임 위젯입니다.", font=("Dotum", 11, 'bold'), fg="black", bg="orange"): "이것은 프레임 위젯입니다"라는 한글 텍스트, 사용자 정의 글꼴, 검은색 전경색, 주황색 배경색이 포함된 Label 위젯을 생성합니다. 이 레이블은 프레임 위젯의 자식이 됩니다.
label.pack(padx=20, pady=20): pack() 메서드를 사용하여 프레임 위젯 내부에 라벨 위젯을 패킹하고, x축과 y축에 약간의 패딩을 추가합니다.
button = tk.Button(frame, text="클릭 버튼", font=("Dotum", 10)): "클릭 버튼" 텍스트, 사용자 정의 글꼴, 기본 전경색이 포함된 버튼 위젯을 생성합니다. 이 버튼은 프레임 위젯의 자식이 되기도 합니다.
button.pack(padx=10, pady=10): pack() 메서드를 사용하여 프레임 위젯 안에 버튼 위젯을 패킹하고, x축과 y축에 약간의 패딩을 추가합니다.
frame.pack(padx=20, pady=20): pack() 메서드를 사용하여 프레임 위젯을 루트 창 안에 패킹하고, x축과 y축에 약간의 패딩을 추가합니다.
root.geometry("300x150"): 루트 창의 크기를 너비 300픽셀, 높이 150픽셀로 설정합니다.
root.mainloop(): 사용자 입력을 기다렸다가 그에 따라 응답하는 애플리케이션의 이벤트 루프를 시작합니다.

 

Checkbutton 위젯

파이썬 Tkinter에서 체크 버튼 위젯은 사용자가 미리 정의된 선택 사항 집합에서 하나 이상의 옵션을 선택할 수 있는 방법을 제공하는 그래픽 사용자 인터페이스(GUI) 컴포넌트입니다.

확인 버튼은 레이블과 확인 표시가 있는 직사각형 상자입니다. 사용자는 상자를 클릭하여 확인 표시를 선택하거나 선택 취소할 수 있습니다. 체크 버튼이 선택되면 "선택됨"이라고 하고 선택되지 않으면 "선택 취소됨"이라고 합니다.

체크 버튼 위젯은 일반적으로 사용자가 두 가지 옵션(예: "예" 또는 "아니오", "켜기" 또는 "끄기", "참" 또는 "거짓" 등) 중 하나를 선택하거나 그룹에서 여러 옵션(예: "빨강", "초록", "파랑")을 선택할 수 있는 부울 값을 표현하는 데 사용됩니다.

Python Tkinter에서는 Checkbutton 클래스를 사용하여 체크 버튼 위젯을 만들 수 있습니다. text 매개 변수를 사용하여 체크 버튼의 텍스트 레이블을 설정하고 변수 매개 변수를 사용하여 체크 버튼의 초기 상태를 설정할 수 있습니다. 명령 매개변수를 사용하여 체크버튼의 상태가 변경될 때 호출될 콜백 함수를 체크버튼에 연결할 수도 있습니다.

from tkinter import *

# 새 윈도우 생성
root = Tk()

# 윈도우 제목 설정
root.title("체크버튼 예제")

# 텍스트 레이블이 다른 버튼 3개 생성
checkbutton1 = Checkbutton(root, text="Option 1")
checkbutton2 = Checkbutton(root, text="Option 2")
checkbutton3 = Checkbutton(root, text="Option 3")

# 체크버튼 중앙 정렬
checkbutton1.pack(side="top", fill="both", expand=True)
checkbutton2.pack(side="top", fill="both", expand=True)
checkbutton3.pack(side="top", fill="both", expand=True)

# 윈도우 상단 하단에 패딩 추가 (가로, 세로 중앙 정렬)
root.geometry("300x300+0+0")
root.update()
window_height = root.winfo_height()
top_padding = (root.winfo_screenheight() - window_height) // 2
root.geometry(f"300x300+0+{top_padding}")

# 이벤트 룹 실행
root.mainloop()

1  |  GUI 애플리케이션을 만들기 위한 도구를 제공하는 tkinter 모듈을 임포트합니다.
2  |  GUI의 기본 창을 나타내는 새 Tk 객체를 만듭니다.
3  |  메인 창의 제목을 "체크버튼 예제"로 설정합니다.
4  |  3개의 체크버튼 위젯을 생성하여 메인 창에 추가합니다.
5  |  pack() 메서드를 사용하여 체크버튼을 가로로 가운데에 배치하고 창 상단에 배치합니다.
6  |  기본 창의 지오메트리를 "300x300+0+0"으로 설정합니다. 이는 너비와 높이가 300픽셀이고 화면 왼쪽 상단에 창 위치를 의미합니다.
7  |  update() 메서드를 호출하여 winfo_height() 메서드를 사용하여 높이를 가져오기 전에 창이 그려졌는지 확인합니다.
8  | top_padding 창을 세로로 중앙에 배치하는 데 필요한 상단 패딩의 양을 계산합니다. 
9  |  y 좌표에 상단 패딩을 추가하여 메인 창의 새 지오메트리를 설정합니다.
10  |  사용자 동작을 기다렸다가 이에 응답하는 GUI의 메인 이벤트 루프를 시작합니다.

 

Radiobutton 위젯

Python Tkinter의 라디오 버튼 위젯은 사용자가 옵션 그룹에서 하나의 옵션을 선택할 수 있도록 하는 데 사용할 수 있는 버튼 위젯의 한 유형입니다. 사용자가 옵션 목록에서 단일 옵션을 선택해야 하는 양식이나 설정 창에서 자주 사용됩니다.

라디오 버튼 위젯 그룹은 공통 변수를 통해 서로 연결되며, 각 라디오 버튼은 해당 변수에 대한 단일 값을 나타냅니다. 사용자가 라디오 버튼을 선택하면 해당 버튼과 연결된 값이 변수에 저장됩니다.

라디오 버튼 위젯을 만들 때는 부모 위젯(일반적으로 프레임 또는 기본 Tk 창), 해당 버튼의 값, 버튼 옆에 표시될 레이블 또는 텍스트를 제공해야 합니다.

다음은 세 개의 라디오 버튼 위젯을 만드는 코드 예시입니다:

from tkinter import *

root = Tk()

# selected value값을 저장할 변수 생성
selected_value = StringVar()

# 3개의 서로 다른 value값을 갖는 라디오버튼 생성
radiobutton1 = Radiobutton(root, text="Option 1", variable=selected_value, value="option1")
radiobutton2 = Radiobutton(root, text="Option 2", variable=selected_value, value="option2")
radiobutton3 = Radiobutton(root, text="Option 3", variable=selected_value, value="option3")

# 라디오버튼을 윈도우에 세로로 정렬
radiobutton1.pack(side="top", fill="both", expand=True)
radiobutton2.pack(side="top", fill="both", expand=True)
radiobutton3.pack(side="top", fill="both", expand=True)

# 윈도우 상단 하단에 패딩 추가 (가로, 세로 중앙 정렬)
root.geometry("300x200+0+0")
root.update()
window_height = root.winfo_height()
top_padding = (root.winfo_screenheight() - window_height) // 2
root.geometry(f"300x200+0+{top_padding}")

# 이벤트 룹 실행
root.mainloop()

 

 

 

 

 

 

 

 

매일 조금씩..

반응형