파이썬 (pythoon)

파이썬 Tkinter 이미지 뷰어 프로그램 만들기

working for you 2023. 6. 17. 15:08
반응형

파이썬 Tkinter 이미지 뷰어 프로그램 만들기 방법을 살펴봅니다. Tkinter는 그래픽 사용자 인터페이스를 구축하는 간단하고 직관적인 방법을 제공하므로 깨끗하고 사용자 친화적인 인터페이스로 이미지 뷰어를 만드는데 매우 탁월 합니다. 파일다이얼로그를 사용해서 같이 구성해 보겠습니다.

 

[목차]
1단계: 필수 모듈 가져오기
2단계: 이미지 뷰어 클래스 만들기
3단계: 디스플레이 이미지에 위젯 추가
4단계: 이미지 열기 및 표시
5단계: 애플리케이션 실행
예제 프로그램 코드
결론 및 의견

 

 

 

1단계: 필수 모듈 가져오기

시작하려면 이미지 뷰어에 필요한 모듈을 가져오겠습니다.

import os
import tkinter as tk
from PIL import Image, ImageTk
from tkinter import filedialog

os 모듈은 파일 경로 및 디렉토리 작업을 도와줍니다. tkinter는 그래픽 사용자 인터페이스를 구축하기 위한 기본 모듈입니다. PIL 라이브러리의 Image 및 ImageTk 모듈은 이미지 로드 및 렌더링을 처리합니다. filedialog를 사용하면 파일 대화 상자를 열어 이미지를 선택할 수 있습니다.

 

 

2단계: 이미지 뷰어 클래스 만들기

다음으로 tkinter.Tk에서 상속되는 ImageViewer라는 클래스를 정의해야 합니다. 이 클래스는 이미지 뷰어 응용 프로그램의 기본 창 역할을 합니다.

class ImageViewer(tk.Tk):
    def __init__(self):
        super().__init__()

        self.title("Image Viewer")
        self.geometry("800x600")

        self.create_widgets()

    def create_widgets(self):
        # Widget creation code goes here

__init__ 메소드에서 창의 제목과 초기 크기를 설정합니다. create_widgets 메서드는 창 내 위젯 생성을 담당합니다.

 

 

3단계: 디스플레이 이미지에 위젯 추가

create_widgets 메서드 내에서 이미지를 표시하는 위젯을 추가합니다. tkinter.Label 위젯을 사용하여 이미지를 보관하고 tkinter.Button을 사용하여 이미지 선택을 위한 파일 대화 상자를 엽니다.

def create_widgets(self):
    self.image_label = tk.Label(self)
    self.image_label.pack()

    self.open_button = tk.Button(self, text="Open Image", command=self.open_image)
    self.open_button.pack()

image_label은 선택한 이미지를 표시합니다. open_button은 파일 대화 상자를 트리거하여 이미지 파일을 선택합니다.

 

 

4단계: 이미지 열기 및 표시

파일 대화 상자를 열고 선택한 이미지를 로드하는 open_image라는 메서드를 구현해 보겠습니다. filedialog.askopenfilename 함수를 사용하여 대화 상자를 열고 Image 및 ImageTk 모듈을 사용하여 이미지를 로드하고 표시합니다.

def open_image(self):
    image_path = filedialog.askopenfilename()
    if image_path:
        image = Image.open(image_path)
        photo = ImageTk.PhotoImage(image)
        self.image_label.configure(image=photo)
        self.image_label.image = photo

filedialog.askopenfilename 함수는 파일 대화 상자를 열고 선택한 이미지의 파일 경로를 반환합니다. 이미지가 선택되면 Image.open 메서드를 사용하여 이미지를 로드합니다. ImageTk.PhotoImage는 이미지를 Tkinter가 표시할 수 있는 형식으로 변환합니다. 마지막으로 로드된 이미지로 image_label을 구성합니다.

 

 

5단계: 애플리케이션 실행

애플리케이션을 완성하려면 ImageViewer 클래스의 인스턴스를 생성하고 Tkinter 이벤트 루프를 실행해야 합니다.

if __name__ == "__main__":
    image_viewer = ImageViewer()
    image_viewer.mainloop()

if __name__ == "__main__": 블록은 스크립트를 모듈로 가져올 때가 아니라 스크립트를 직접 실행할 때만 코드가 실행되도록 합니다.

 

 

예제 프로그램 코드

이미지 뷰어 애플리케이션을 사용하려면, 이 코드를 .py 확장자를 가진 Python 파일로 저장하고, 스크립트를 실행하면 이미지 뷰어 창이 열립니다. "이미지 열기" 버튼을 클릭하고, 파일 대화상자를 사용하여 컴퓨터에서 이미지 파일을 선택하면 이미지가 애플리케이션 창에 표시됩니다.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
import os
import tkinter as tk
from PIL import Image, ImageTk
from tkinter import filedialog
 
class ImageViewer(tk.Tk):
    def __init__(self):
        super().__init__()
 
        self.title("Image Viewer")
        self.geometry("800x600")
 
        self.create_widgets()
 
    def create_widgets(self):
        self.image_label = tk.Label(self)
        self.image_label.pack()
 
        self.open_button = tk.Button(self, text="Open Image", command=self.open_image)
        self.open_button.pack()
 
    def open_image(self):
        image_path = filedialog.askopenfilename()
        if image_path:
            image = Image.open(image_path)
            photo = ImageTk.PhotoImage(image)
            self.image_label.configure(image=photo)
            self.image_label.image = photo
 
if __name__ == "__main__":
    image_viewer = ImageViewer()
    image_viewer.mainloop()
 
cs

실행화면

 

 

  1. 코드는 필요한 모듈들을 가져오는 것으로 시작됩니다: os, tkinter, 이미지 처리를 위한 PIL (Python Imaging Library), tkinter의 filedialog입니다.
  2. ImageViewer 클래스가 정의되는데, 이 클래스는 tkinter.Tk를 상속합니다. 이 클래스는 이미지 뷰어 애플리케이션의 주 창을 나타냅니다.
  3. ImageViewer 클래스의 __init__ 메서드에서 창의 제목을 "이미지 뷰어"로 설정하고, 창의 크기를 "800x600"으로 설정합니다.
  4. create_widgets 메서드는 ImageViewer 클래스 내에서 정의됩니다. 이 메서드는 창 내에 위젯들을 생성하는 역할을 합니다.
  5. create_widgets 메서드 내에서 image_label이라는 tkinter.Label 위젯이 생성됩니다. 이 라벨은 선택한 이미지를 표시할 것입니다. 라벨은 pack() 메서드를 사용하여 창에 포장됩니다.
  6. 또 다른 위젯인 open_button이 생성됩니다. 이 버튼은 이미지 파일을 선택하기 위해 파일 대화상자를 열게 됩니다. 버튼의 텍스트는 "이미지 열기"로 설정되고, command 매개변수는 클릭 시 호출될 open_image 메서드로 설정됩니다. 버튼도 창에 포장됩니다.
  7. open_image 메서드는 ImageViewer 클래스 내에서 정의됩니다. 이 메서드는 "이미지 열기" 버튼을 클릭했을 때 호출됩니다. filedialog.askopenfilename()을 사용하여 파일 대화상자를 열고, 선택된 이미지 파일 경로를 image_path 변수에 저장합니다.
  8. 이미지가 선택된 경우 (즉, image_path가 비어 있지 않은 경우), PIL의 Image.open()을 사용하여 선택한 이미지를 엽니다. 그런 다음 ImageTk.PhotoImage()를 사용하여 이미지를 Tkinter 라벨 위젯에 표시할 수 있는 PhotoImage 객체로 변환합니다.
  9. 그런 다음 image_label 위젯은 PhotoImage 객체로 구성되고, 라벨의 image 속성은 PhotoImage로 설정됩니다. 이렇게 하면 애플리케이션 창에 선택한 이미지가 표시됩니다.
  10. 마지막으로 ImageViewer 클래스 외부에서 코드는 스크립트가 직접 실행되는지 (모듈로 가져오지 않는지) 확인합니다. 메인 스크립트인 경우 ImageViewer 클래스의 인스턴스를 생성하고 mainloop()를 사용하여 Tkinter 이벤트 루프를 시작합니다. 이를 통해 이미지 뷰어 창이 표시되고 사용자 상호작용을 처리합니다.

 

 

결론 및 의견

파이썬 Tkinter 이미지 뷰어 프로그램 만들기 방법을 알아봤습니다. 몇 줄의 코드만으로 이미지를 표시하고 이미지를 선택하고 볼 수 있습니다. 이미지 크기 조정, 회전 또는 슬라이드쇼 기능과 같은 기능을 응용해서 추가 할 수 있습니다. 

 

 

[관련글]

[정보 및 유용한 팁] - 챗GPT 란? (CHAT GPT 사용)

 

챗GPT 란? (CHAT GPT 사용)

챗GPT 란 무엇일까요? 요즘 너무 핫하다 못해 마치 옆에 있는 선생님처럼 느껴지는 이 인공지능 AI에 대해서 이해하기 쉽게 정리하려 합니다. 결론적으로 챗GPT에게 질문을 하면, 형식적인 답이 아

2toy.net

[파이썬 (pythoon)] - 파이썬 Tkinter를 사용하여 캘린더 달력 프로그램 만들기

 

파이썬 Tkinter를 사용하여 캘린더 달력 프로그램 만들기

파이썬 Tkinter를 사용하여 캘린더 달력 프로그램 만들기 방법을 살펴봅니다. Tkinter는 그래픽 사용자 인터페이스를 구축하는 편리한 방법을 제공하며 강력한 기능을 통해 기능적인 달력 응용 프

2toy.net

[파이썬 (pythoon)] - Python Tkinter sqlite 3 데이터베이스 insert, update, delete

 

Python Tkinter sqlite 3 데이터베이스 insert, update, delete

Python Tkinter sqlite 사용하여 데이터베이스 작업을 위해 데이터베이스용 그래픽 사용자 인터페이스를 구축하는 방법을 살펴봅니다. 필수 개념을 다루고 직관적이고 효율적인 데이터베이스 애플리

2toy.net

[파이썬 (pythoon)] - Python Tkinter를 사용한 채팅 프로그램 만들기

 

Python Tkinter를 사용한 채팅 프로그램 만들기

Python Tkinter는 Python에서 그래픽 사용자 인터페이스(GUI)를 사용하여 채팅 응용 프로그램을 구축하는 방법을 살펴봅니다. 이 자습서를 따라 기능 및 대화형 채팅 인터페이스를 만드는 데 필요한 기

2toy.net

[html 자바스크립트 study] - html은 프로그래밍 언어가 아닙니다 - 오해와 진실

 

html은 프로그래밍 언어가 아닙니다 - 오해와 진실

웹 개발에 관심 있는 많은 사람들이 HTML(HyperText Markup Language)을 프로그래밍 언어로 오해하고 있습니다. 그러나 HTML은 사실 프로그래밍 언어가 아닙니다. 이 글에서는 HTML이 프로그래밍 언어가 아

2toy.net

반응형