많은 컴퓨터 시스템에서 쉽게 사용할 수 있는 유비쿼터스 애플리케이션인 이 간단한 페인트 프로그램은 아티스트가 마음껏 실험하고 오류를 통해 배울 수 있는 기회를 제공하며, 마음대로 색상을 선택하고 브러시 스트로크의 크기를 즉시 조정할 수 있습니다. 이 다용도 도구는 회사 엠블럼 제작, 인터페이스 디자인 시각화, 회로도 주석 달기 등을 용이하게 해줍니다.

코팅 애플리케이션을 건설적으로 조립하려면 어떻게 해야 합니까?

Tkinter 및 Pillow 모듈

Python을 사용하여 도장 애플리케이션을 개발하려면 Tkinter 및 Pillow 모듈에 모두 액세스 할 수 있어야 합니다. Tkinter 프레임워크는 파이썬에서 그래픽 사용자 인터페이스를 설계하는 데 사용할 수 있는 최고의 옵션 중 하나로 널리 알려져 있습니다. 데스크톱 애플리케이션을 제작하기 위한 기본 Python 인터페이스로서, 시각적으로 매력적이고 기능적인 사용자 인터페이스를 만드는 데 사용할 수 있는 레이블, 텍스트 항목, 캔버스 및 버튼과 같은 다양한 내장 구성 요소를 제공합니다.

널리 알려진 Python 이미징 라이브러리(PIL)에서 파생된 다용도 소프트웨어 도구인 Pillow는 Python 프로그래밍 언어 내에서 효과적인 이미지 처리 솔루션으로 사용됩니다. 사용자는 포괄적인 기능을 활용하여 디지털 시각 콘텐츠에 대한 열기, 크기 조정, 뒤집기, 자르기, 파일 형식 변환, 이미지 성분 또는 구성 요소를 식별하는 고급 애플리케이션 개발, 임의의 사진 검색 등 다양한 작업을 마음대로 수행할 수 있습니다.

이러한 구성 요소를 설정하려면 다음 명령을 실행하세요:

 pip install tk pillow 

페인트 애플리케이션의 구조 정의

이 작업의 전체 코드베이스는 모든 구성 요소에 쉽게 액세스할 수 있는 GitHub 리포지토리를 통해 액세스할 수 있습니다.

먼저 Python 그래픽 애플리케이션에 필요한 모듈을 임포트하겠습니다. 애플리케이션의 제목, 포인터 색상, 지우개 색상을 설정하는 ‘DrawApp’이라는 클래스를 생성하겠습니다. 또한 애플리케이션이 실행될 때 전체 화면 모드로 열리도록 합니다. 마지막으로 `setup_widgets()` 메서드를 호출하여 사용자 인터페이스를 초기화합니다.

 import tkinter as tk
from tkinter.ttk import Scale
from tkinter import colorchooser, filedialog, messagebox
import PIL.ImageGrab as ImageGrab

class DrawApp:
    def __init__(self, root):
        self.root = root
        self.root.title("Kids' Paint App")
        self.root.attributes("-fullscreen", True)
        self.pointer = "black"
        self.erase = "white"
        self.setup_widgets()

제공된 프로그래밍 환경에서 대화형 인터페이스를 생성하기 위해 특정 속성을 가진 레이블 생성, 프레임 정의, 위젯 속성 설정 등 다양한 기능을 포괄하는 `setup_widgets`라는 함수를 정의합니다. 이렇게 하면 사용자가 애플리케이션 내에서 정보를 조작할 수 있는 시각적 단서와 도구를 제공하여 프로그램과 더 효과적으로 상호 작용할 수 있습니다.

     def setup_widgets(self):
        self.title_label = tk.Label(
            self.root,
            text="Kids' Paint App",
            font=("Comic Sans MS", 30),
            bg="lightblue",
            fg="purple",
        )
        self.title_label.pack(fill=tk.X, pady=10)
        self.color_frame = tk.LabelFrame(
            self.root,
            text="Colors",
            font=("Comic Sans MS", 15),
            bd=5,
            relief=tk.RIDGE,
            bg="white",
        )
        self.color_frame.place(x=10, y=80, width=90, height=180)

다음은 Flask를 사용하여 주어진 색상 팔레트를 기반으로 버튼을 표시하는 웹 애플리케이션을 정의하는 Python 구현 예제입니다: ”’python 에서 플라스크 임포트 플라스크, 렌더_템플릿 import random app = Flask(__name__) colors = [“빨강”, “주황”, “노랑”, “초록”, “파랑”, “보라”] app.route(‘/’) def index(): return render_template(‘index.html’, colors=colors) if __name__ == ‘__main__’: app.run() “` 이 코드 스니펫에서는 먼저 ‘app’이라는 웹 애플리케이션을 생성하는 데 필요한 `Flask`를 포함한 필요한 라이브러리를 가져옵니다. 또한 다양한 색상을 포함하는 `colors`라는 목록을 정의합니다.

         colors = [
            "blue",
            "red",
            "green",
            "orange",
            "violet",
            "black",
            "yellow",
            "purple",
            "pink",
            "gold",
            "brown",
            "indigo",
        ]
        i, j = 0, 0
        for color in colors:
            tk.Button(
                self.color_frame,
                bg=color,
                bd=2,
                relief=tk.RIDGE,
                width=3,
                command=lambda col=color: self.select_color(col),
            ).grid(row=i, column=j, padx=2, pady=2)
            i += 1
            if i == 4:
                i = 0
                j = 1

같은 방식으로 지우개 버튼, 디스플레이를 지우는 버튼, 그림을 보존하는 버튼을 지정합니다.

         self.eraser_btn = tk.Button(
            self.root,
            text="Eraser",
            bd=4,
            bg="white",
            command=self.eraser,
            width=9,
            relief=tk.RIDGE,
            font=("Comic Sans MS", 12),
        )
        self.eraser_btn.place(x=10, y=310)
        self.clear_screen_btn = tk.Button(
            self.root,
            text="Clear Screen",
            bd=4,
            bg="white",
            command=self.clear_screen,
            width=12,
            relief=tk.RIDGE,
            font=("Comic Sans MS", 12),
        )
        self.clear_screen_btn.place(x=10, y=370)
        self.save_as_btn = tk.Button(
            self.root,
            text="Save Drawing",
            bd=4,
            bg="white",
            command=self.save_as,
            width=12,
            relief=tk.RIDGE,
            font=("Comic Sans MS", 12),
        )
        self.save_as_btn.place(x=10, y=430)
        self.bg_btn = tk.Button(
            self.root,
            text="Background",
            bd=4,
            bg="white",
            command=self.canvas_color,
            width=12,
            relief=tk.RIDGE,
            font=("Comic Sans MS", 12),
        )
        self.bg_btn.place(x=10, y=490)
        self.pointer_frame = tk.LabelFrame(
            self.root,
            text="Size",
            bd=5,
            bg="white",
            font=("Comic Sans MS", 15, "bold"),
            relief=tk.RIDGE,
        )

디지털 아트웍을 위한 맞춤형 크기 조정 도구를 만들려면 먼저 포인터 또는 지우개의 크기를 조정하는 데 사용할 수 있는 크기 조정 위젯을 정의해야 합니다. 원하는 상위 요소를 지정하고 배율에 적합한 방향, 범위 및 픽셀 길이를 설정하면 됩니다. 또한 캔버스 요소를 정의하는 것은 아티스트가 그릴 수 있는 작업 공간을 제공하는 데 필수적입니다. 이를 위해서는 캔버스의 부모 요소를 지정하고 원하는 배경색을 설정한 다음 테두리 폭을 적절히 조정해야 합니다. 마지막으로 캔버스에 독특한 시각적 매력을 부여하려면 홈이 있는 텍스처를 포함하도록 릴리프 스타일을 설정하는 동시에 돌출된 영역의 높이와 너비에 대한 특정 치수를 결정하는 것이 중요합니다.

이 글도 확인해 보세요:  JES에서 사운드를 임포트하고 재생하는 방법

캔버스를 화면의 적절한 위치에 배치하고 왼쪽 상단 모서리에 고정되도록 구성합니다. 그런 다음 B1 키를 누른 상태에서 마우스를 이동하는 것과 관련된 기능을 페인트 기능에 바인딩합니다. “B1″이라는 용어는 마우스 왼쪽 버튼을 누르고 있는 것과 관련이 있으며 “모션”은 커서의 후속 동작을 나타냅니다. 이 설정을 활용하면 마우스 왼쪽 버튼을 누르고 있을 때 마우스 커서의 움직임을 모니터링할 수 있습니다.

         self.pointer_frame.place(x=10, y=580, height=150, width=70)
        self.pointer_size = Scale(
            self.pointer_frame, orient=tk.VERTICAL, from_=48, to=1, length=120
        )
        self.pointer_size.set(1)
        self.pointer_size.grid(row=0, column=1, padx=15)
        self.canvas = tk.Canvas(
            self.root, bg="white", bd=5, relief=tk.GROOVE, height=650, width=1300
        )
        self.canvas.place(x=160, y=120, anchor="nw")
        self.canvas.bind("<B1-Motion>", self.paint)

페인트 애플리케이션의 기능 정의

페인팅 과정에는 애플리케이션이 지속적인 계산을 통해 커서의 위치를 업데이트하여 작은 타원형 모양을 반복적으로 생성하는 기법을 활용합니다. 이 작업을 수행하기 위해 먼저 사용자 입력 이벤트의 x좌표와 y좌표 값에서 두 단위를 빼서 각 타원의 시작점을 식별합니다. 이 작업을 통해 타원의 왼쪽 상단 모서리가 설정됩니다. 다음으로, 타원의 오른쪽 하단 모서리를 계산하는 x-좌표와 y-좌표 값에 두 단위를 더합니다.이렇게 결정된 경계를 사용하여 지정된 매개변수를 기반으로 타원 모양을 만듭니다.

선택한 커서 옵션에 따라 채우기, 윤곽선 및 두께 설정을 조정합니다.

     def paint(self, event):
        x1, y1 = (event.x - 2), (event.y - 2)
        x2, y2 = (event.x + 2), (event.y + 2)
        self.canvas.create_oval(
            x1,
            y1,
            x2,
            y2,
            fill=self.pointer,
            outline=self.pointer,
            width=self.pointer_size.get(),
        )

주어진 텍스트는 `select_color`, `eraser`, `clear_screen`의 세 가지 메서드를 설명합니다. 첫 번째 함수인 `select_color`는 특정 색상을 나타내는 매개변수를 받아 관련 포인터를 이 값으로 업데이트합니다. 두 번째 메서드인 `eraser`는 그림을 그릴 때 반투명 윤곽선을 만들도록 포인터의 동작을 수정합니다. 마지막으로 `clear_screen` 함수는 캔버스 영역 내에 표시된 모든 요소를 제거합니다.

     def select_color(self, col):
        self.pointer = col

    def eraser(self):
        self.pointer = self.erase

    def clear_screen(self):
        self.canvas.delete("all")

다음은 코드에 통합할 수 있는 `canvas_color` 함수의 구현 예제입니다: “`python def canvas_color(self): PyQt5에서 QtWidgets, QtGui를 임포트합니다. # 색상 선택기 대화 상자를 여는 메서드를 정의합니다. def choose_color(): color = QtWidgets.QColorDialog().getColor() if color != None: return (int(color.red()), int(color.green()), int(color.blue())) # 사용 가능한 색상 목록 생성 available_colors = [(255, 0, 0), (0, 255, 0), (0, 0, 255)] # Prom

     def canvas_color(self):
        color = colorchooser.askcolor()
        if color:
            self.canvas.configure(background=color[1])
            self.erase = color[1]

`save_as` 함수를 사용하여 캡처한 이미지를 저장할 파일 이름과 디렉토리를 선택하라는 메시지를 표시하는 인터페이스를 생성합니다. 그런 다음 파이썬 이미징 라이브러리(PIL) 패키지의 `ImageGrab` 클래스를 사용하여 파일 대화 상자를 통해 디스플레이의 전체 내용을 캡처합니다. 그런 다음 제공된 좌표를 사용하여 이미지에서 특정 캔버스 영역을 추출합니다. 필요에 따라 좌표를 조정하여 화면의 원하는 부분을 얻습니다.

이 글도 확인해 보세요:  HTML과 CSS를 사용하여 반응형 탐색 모음을 구축하는 방법

이 소프트웨어는 현재 그림을 현재 형태로 이미지 파일로 저장하는 동시에 프로세스 중에 오류가 발생하면 알림 대화 상자를 표시하도록 설계되었습니다.

     def save_as(self):
        file_path = filedialog.asksaveasfilename(
            defaultextension=".jpg", filetypes=[("Image files", "*.jpg")]
        )
        if file_path:
            try:
                y = 148
                x = 200
                y1 = 978
                x1 = 1840
                ImageGrab.grab().crop((x, y, x1, y1)).save(file_path)
                messagebox.showinfo("Save Drawing", "Image file saved successfully!")
            except Exception as e:
                messagebox.showerror("Error", f"Failed to save the image file: {e}")

파이썬에서 그래픽 사용자 인터페이스(GUI)를 초기화하려면 먼저 Tkinter 모듈과 Tkinter의 캔버스 위젯을 확장하는 사용자 정의 DrawApp 클래스의 인스턴스를 모두 생성해야 합니다. 이 작업은 `Tk()`를 호출한 다음 생성자 `DrawApp()`를 사용하여 DrawApp 객체를 생성할 때 인자로 전달하면 수행됩니다. 이러한 객체가 인스턴스화되면 DrawApp 클래스 고유의 메서드와 속성을 통해 GUI 레이아웃 및 기능 설정을 진행할 수 있습니다. 모든 설정이 완료되면 루트 창에서 `mainloop()` 메서드를 호출하면 Tkinter에서 제공하는 이벤트 루프가 시작됩니다. 이 루프는 버튼 클릭이나 키보드 입력과 같은 다양한 이벤트를 수신하고 DrawApp 클래스에 정의된 이벤트 처리 함수 내에서 적절하게 처리합니다.기본적으로

 if __name__ == "__main__":
    root = tk.Tk()
    app = DrawApp(root)
    root.mainloop()

파이썬을 사용하여 다양한 페인팅 기능 테스트

페인트 애플리케이션을 실행하면 색상 선택 도구, 네 가지 기능 컨트롤, 예술적 표현을 위해 설계된 그리기 표면이 포함된 그래픽 인터페이스가 표시됩니다.

특정 색조를 선택하면 마우스 왼쪽 버튼을 누른 상태에서 클릭하여 원하는 색조를 사용하여 아트웍을 생성할 수 있습니다.

해당 버튼을 클릭하고 수직 슬라이더를 위쪽 방향으로 움직여 지우개 도구와 상호 작용하면 사용자가 지우개 도구를 선택하고 크기를 확대할 수 있습니다. 이 기능의 기능을 확인하려면 선택한 지우개를 캔버스에서 움직여 그려진 선을 제거하기만 하면 됩니다.

“화면 지우기” 옵션을 클릭하면 소프트웨어가 이전에 실행한 모든 아트웍을 삭제합니다. 배경의 색조를 수정하려면 “배경” 기능을 선택하면 배경에 원하는 색조를 선택할 수 있는 색상 스펙트럼이 표시됩니다.

이 글도 확인해 보세요:  React Native에서 Flexbox를 사용하는 방법

“그림 저장” 옵션을 선택하면 사용자 친화적인 인터페이스가 나타나 원하는 위치를 선택하고 작품에 제목을 지정할 수 있습니다. 그러면 소프트웨어가 지정된 폴더에 콘텐츠를 즉시 저장합니다.

페인트 애플리케이션 개선

페인팅 소프트웨어의 활용성을 높이기 위해 사용자가 다양한 모양을 작품에 통합할 수 있는 기능을 도입할 것을 제안합니다. 또한 다양한 유형의 브러시를 선택하고 불투명도를 조정할 수 있는 옵션을 제공하는 것이 좋습니다. 또한 스티커 형태로 텍스트와 그래픽을 적용할 수 있는 도구도 포함하면 유용할 것입니다. 마지막으로 실행 취소, 다시 실행, 크기 조정 및 이미지 회전과 같은 기능을 구현하면 창작 과정을 상당히 간소화할 수 있습니다.

create\_rectangle 함수를 통해 직사각형 생성 구현, create\_oval 메서드를 통한 타원 생성, create\_line 접근 방식을 통한 선 묘사, create\_polygon 함수를 사용한 다각형 구성 등 다양한 기법을 활용하여 양식을 생성합니다. 또한 create\_text 및 create\_image 함수를 활용하여 시각적 콘텐츠를 통합합니다. Pillow의 크기 조정 및 방향 전환 기능을 활용하여 이미지 크기와 방향을 조정하세요.

By 박준영

업계에서 7년간 경력을 쌓은 숙련된 iOS 개발자인 박준영님은 원활하고 매끄러운 사용자 경험을 만드는 데 전념하고 있습니다. 애플(Apple) 생태계에 능숙한 준영님은 획기적인 솔루션을 통해 지속적으로 기술 혁신의 한계를 뛰어넘고 있습니다. 소프트웨어 엔지니어링에 대한 탄탄한 지식과 세심한 접근 방식은 독자에게 실용적이면서도 세련된 콘텐츠를 제공하는 데 기여합니다.