업무 자동화를 위해 만든 툴 중 특정 사이트에 대한 크롤러툴이 있는데, 실행 시 해당 포스트에 대한 url을 전달해야 했기에 매번 콘솔창에서 실행해야하는 불편함이 있었다.
하는김에 좀 더 편리하게 만들어보면 어떨까 라는 생각에 python GUI 모듈인 pyqt를 사용하게 되었다.
pip install PyQt5
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에 한줄만 추가하니 바로 적용이 잘 됐다.

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_())
크롤러 코드 메인
if __name__ == "__main__":
URL = sys.argv[1]
parser(URL)
이후 pyinstaller로 메인 실행파일을 exe로 만들어주면 끝!
pyinstaller -w -F --icon=web-crawler.ico Crawler_GUI.py
