Pyqt5 와 크롤러

newin·2022년 11월 10일

개발

목록 보기
1/4

개요

업무 자동화를 위해 만든 툴 중 특정 사이트에 대한 크롤러툴이 있는데, 실행 시 해당 포스트에 대한 url을 전달해야 했기에 매번 콘솔창에서 실행해야하는 불편함이 있었다.

하는김에 좀 더 편리하게 만들어보면 어떨까 라는 생각에 python GUI 모듈인 pyqt를 사용하게 되었다.

Pyqt5

설치

pip install PyQt5

Crawler_GUI.py

import sys
from PyQt5.QtWidgets import QApplication, QLabel, QLineEdit, QPushButton,QDesktopWidget,QWidget
import Crawler

class Craw(QWidget):
    
    def __init__(self):
        super().__init__()
        self.setupUI()

    def setupUI(self):
        self.setWindowTitle('크롤러 프로그램') 
        self.resize(400, 400)
        self.center()

        self.line_edit = QLineEdit(self)
        self.line_edit.move(100, 100)

        self.text_label = QLabel(self)
        self.text_label.move(100,160)
        self.text_label.setText('URL을 입력')
        
        self.button = QPushButton(self)
        self.button.move(100, 200)
        self.button.setText('Input')
        self.button.clicked.connect(self.button_event)
        self.show()
        
#Crawler.
    def button_event(self):
        text = self.line_edit.text() # line_edit text 값 가져오기

        try:
            Crawler.parser(text)
        except:
            text = "Error!"
            self.text_label.setText(text)

    def center(self): #화면 가운데 정렬
        qr = self.frameGeometry()
        cp = QDesktopWidget().availableGeometry().center()
        qr.moveCenter(cp)
        self.move(qr.topLeft())       

if __name__ == '__main__':

    app = QApplication(sys.argv)
    #pyqt사용을 위한 어플리케이션 객체 생성
    ex = Craw()
    sys.exit(app.exec_())

app = QApplication(sys.argv)

어플리케이션이 시작되면 어플리케이션을 시작하는 데 사용되는 인수 "sys.argv" 가 포함된다.

python을 실행할 때 pyhon 스크립트 파일의 이름이 첫 번째 항목으로 포함된다.

ex) python filename.py

전달할 때 QApplication(sys.argv) 에서 sys.argv의 인수를 Qt에 전달한다.
즉, 어플리케이션 시작 시 모든 구성 설정을 Qt에 전달할 수 있다.

참고

def center(self):
    qr = self.frameGeometry() #frameGeometry() 매서드를 통해 창의 위치와 크기 정보를 가져옴
    cp = QDesktopWidget().availableGeometry().center() # 사용하는 모니터 화면의 가운데 위치 파악
    qr.moveCenter(cp) #창의 직사각형 위치를 화면의 중심의 위치로 이동
    self.move(qr.topLeft())    #현재 창을, 화면의 중심으로 이동했던 직사각형(qr)의 위치로 이동

QLineEdit : 한줄짜리 텍스트 편집기
QLabel : 텍스트 또는 이미지 표시를 제공

#error 표시난 다음 성공해도 메시지가 사라지지 않아 exception에 코드 추가
    def button_event(self):
        text = self.line_edit.text()

        try:
            Crawler.parser(text)
            text = "make result.txt"
            self.text_label.setText(text)
            
        except:
            text = "Error!"
            self.text_label.setText(text)

근데 글자잘림 현상이 발생했다.

찾아보니 자동으로 크기를 조절하는 label.adjustSize()를 사용하면 된다고 한다.

self.text_label.adjustSize()

button_event에 한줄만 추가하니 바로 적용이 잘 됐다.

최종 Crawler_GUI.py

import sys
from PyQt5.QtWidgets import QApplication, QLabel, QLineEdit, QPushButton,QDesktopWidget,QWidget
import Crawler

class craw(QWidget):
    
    def __init__(self):
        super().__init__()
        self.setupUI()

    def setupUI(self):
        self.setWindowTitle('Crawler 프로그램') 
        self.resize(400, 400)
        self.center()

        self.line_edit = QLineEdit(self)
        self.line_edit.move(100, 100)#75, 75

        self.text_label = QLabel(self)
        self.text_label.move(100,160)
        self.text_label.setText('URL을 입력')
        

        self.button = QPushButton(self)
        self.button.move(100, 200) #75, 175
        self.button.setText('Get Text')
        self.button.clicked.connect(self.button_event)
        self.show()

#Crawler.
    def button_event(self):
        text = self.line_edit.text()

        try:
            Crawler.parser(text)
            text = "make result.txt"
            self.text_label.setText(text)
            self.text_label.adjustSize()

        except:
            text = "Error!"
            self.text_label.setText(text)

    def center(self):
        qr = self.frameGeometry()
        cp = QDesktopWidget().availableGeometry().center() 
        qr.moveCenter(cp)
        self.move(qr.topLeft()) 

if __name__ == '__main__':

    app = QApplication(sys.argv)

    ex = craw()
    sys.exit(app.exec_())

Crawler.py

크롤러 코드 메인

if __name__ == "__main__":
    URL = sys.argv[1]
    parser(URL)

pyinstaller

이후 pyinstaller로 메인 실행파일을 exe로 만들어주면 끝!

pyinstaller -w -F --icon=web-crawler.ico Crawler_GUI.py

profile
개발

0개의 댓글