본문 바로가기
프로그래밍/python

PyQt5로 간단한 화면 캡처 프로그램 만들기

by 마루의 일상 2024. 6. 13.
728x90
반응형

화면캡쳐한 이미지

 

 PyQt5를 사용하여 간단한 화면 캡처 프로그램을 만들어보겠습니다. 이 프로그램은 사용자가 지정한 영역을 캡처하여 이미지를 저장할 수 있도록 합니다. PyQt5는 Python을 사용하여 GUI 애플리케이션을 만들기 위한 강력한 도구입니다. 시작해보겠습니다!

코드 작성

먼저 screen_capture.py 파일을 만들고, 아래 코드를 작성합니다.

import sys
from PyQt5.QtWidgets import QApplication, QWidget, QPushButton, QVBoxLayout, QFileDialog
from PyQt5.QtGui import QScreen, QPixmap

class ScreenCapture(QWidget):
    def __init__(self):
        super().__init__()
        self.initUI()  # 사용자 인터페이스 초기화

    def initUI(self):
        self.setWindowTitle('Screen Capture')  # 창 제목 설정
        
        self.layout = QVBoxLayout()  # 세로 레이아웃 생성
        
        self.captureBtn = QPushButton('Capture Screen', self)  # 캡처 버튼 생성
        self.captureBtn.clicked.connect(self.captureScreen)  # 버튼 클릭 시 captureScreen 메소드 연결
        self.layout.addWidget(self.captureBtn)  # 버튼을 레이아웃에 추가
        
        self.setLayout(self.layout)  # 레이아웃 설정
        self.show()  # 창 표시

    def captureScreen(self):
        # 현재 화면을 캡처
        screen = QApplication.primaryScreen()
        screenshot = screen.grabWindow(0)
        
        # 파일 저장 다이얼로그를 열어 캡처한 이미지를 저장할 경로를 선택
        savePath, _ = QFileDialog.getSaveFileName(self, "Save Image", "", "PNG Files (*.png);;All Files (*)")
        
        if savePath:
            # 선택한 경로에 캡처한 이미지를 저장
            screenshot.save(savePath, 'png')

if __name__ == '__main__':
    app = QApplication(sys.argv)  # 애플리케이션 객체 생성
    ex = ScreenCapture()  # ScreenCapture 객체 생성
    sys.exit(app.exec_())  # 애플리케이션 이벤트 루프 실행

코드 설명

필요한 모듈 가져오기: sys, QApplication, QWidget, QPushButton, QVBoxLayout, QFileDialog, QScreen, QPixmap 모듈을 가져옵니다.

import sys
from PyQt5.QtWidgets import QApplication, QWidget, QPushButton, QVBoxLayout, QFileDialog
from PyQt5.QtGui import QScreen, QPixmap

ScreenCapture 클래스 정의: QWidget을 상속하여 화면 캡처 프로그램의 메인 윈도우를 정의합니다.

class ScreenCapture(QWidget):
    def __init__(self):
        super().__init__()
        self.initUI()  # 사용자 인터페이스 초기화

initUI 메소드: 사용자 인터페이스를 초기화합니다. 캡처 버튼을 생성하고 레이아웃에 추가합니다.

  def initUI(self):
        self.setWindowTitle('Screen Capture')  # 창 제목 설정
        
        self.layout = QVBoxLayout()  # 세로 레이아웃 생성
        
        self.captureBtn = QPushButton('Capture Screen', self)  # 캡처 버튼 생성
        self.captureBtn.clicked.connect(self.captureScreen)  # 버튼 클릭 시 captureScreen 메소드 연결
        self.layout.addWidget(self.captureBtn)  # 버튼을 레이아웃에 추가
        
        self.setLayout(self.layout)  # 레이아웃 설정
        self.show()  # 창 표시

captureScreen 메소드: 화면을 캡처하여 사용자가 지정한 경로에 이미지를 저장합니다.

def captureScreen(self):
        # 현재 화면을 캡처
        screen = QApplication.primaryScreen()
        screenshot = screen.grabWindow(0)
        
        # 파일 저장 다이얼로그를 열어 캡처한 이미지를 저장할 경로를 선택
        savePath, _ = QFileDialog.getSaveFileName(self, "Save Image", "", "PNG Files (*.png);;All Files (*)")
        
        if savePath:
            # 선택한 경로에 캡처한 이미지를 저장
            screenshot.save(savePath, 'png')

메인 실행 코드: QApplication 객체를 생성하고 ScreenCapture 객체를 실행합니다.

if __name__ == '__main__':
    app = QApplication(sys.argv)  # 애플리케이션 객체 생성
    ex = ScreenCapture()  # ScreenCapture 객체 생성
    sys.exit(app.exec_())  # 애플리케이션 이벤트 루프 실행

실행

코드를 작성한 후, 터미널이나 커맨드 프롬프트에서 다음 명령어를 실행하여 프로그램을 실행합니다.

python screen_capture.py

 

'Capture Screen' 버튼을 클릭하면 화면이 캡처되고, 파일 저장 다이얼로그가 나타나며 캡처한 이미지를 저장할 수 있습니다.

결론

이제 PyQt5를 사용하여 간단한 화면 캡처 프로그램을 만들 수 있게 되었습니다. 이 프로그램은 매우 기본적이지만, 이를 바탕으로 다양한 기능을 추가하여 더욱 강력한 화면 캡처 프로그램을 만들 수 있습니다. 예를 들어, 특정 영역을 선택하여 캡처하거나, 캡처한 이미지를 편집하는 기능을 추가할 수 있습니다.

도움이 되셨길 바랍니다! 질문이나 의견이 있으시면 댓글로 남겨주세요. 감사합니다!

728x90
반응형