본문 바로가기
Project

PyQt5 & Pyinstaller 사용한 Excel 저장 프로그램.

by KIha_Jung 2020. 6. 3.

1. 개발 동기

회사 업무를 보던 도중 회계 장부를 Excel로 정리함에 있어서 불편함을 느꼈다.

리스트에 사용 내역을 추가하고 지출결의서를 따로 만들어 사용함에 있어 이중으로 작업을 하게 되어 개발하게 되었다.

 

page1

page2

2. 설계

1. python module openpyxl 을 사용하여 Excel을 컨트롤. -> didimdol.py, seoul.py

2. PyQt5의 Designer을 사용하여 Ui를 제작. -> mainUi.py

3. Pyinstaller을 통한 exe파일 생성. -> main.py

 

3. 개발 과정 및 소스

openpyxl 모듈에 대한 정보는 google에 자세하게 나와있고 어렵지 않았다.

영수증 사용 내역을 디딤돌과 서울시 두 군데에 작성해야 되기 때문에 파이썬 파일을 두 개 생성하였고 소스는 다음과 같다.

main.py 에서 import를 쉽게 하기 위해 class를 적용하였다.

lineEdits list를 생성하여 필요 정보들을 해당 쉘에 저장한다. 완료되면 원본을 update한다.

새로 생성해야 하는 sheet는 sample을 만들어  book.copy_worksheet('')을 이용해 복사해 사용하였다.

 

designer UI 화면

Qt Designer을 사용해서 Ui를 생성하였다. 처음써보는 모듈이라 참고하여 만들었다. 저장을 하게 되면 확장자명이 .ui로 저장된다. python에서 사용하기 위하여 py로 변환해준다.

cmd창을 열어서 pyuic5 파일명.ui -o 파일명.py 를 입력해주면 .py로 변환된다.

 

mainUi.py

확장자 ui를 py로 바뀌면 생성해놓은 UI에 따라서 자동으로 코드가 생성된다.

main.py

다음은 PyQt5 모듈을 사용한 main.py이다. PyQt5에 대한 정보가 없어서 고생했다. QMainWindow와 mainUi.py의 class Ui_Dialog를 상속받아서 UI에 있는 lineEdit의 Text를 긁어 만들어두었던 didimdol.py와 seoul.py의 객체를 생성하여 사용하였다. code가 복잡해 보이지만 뜯어보면 별거없다. check_box를 통해 어떤 결의서인지 선택할 수 있게 하였다. cmd창에서 실행 결과 문제 없이 잘 되었다.

 

 

Pyinstaller 모듈을 이용하여 exe파일을 만들면 프로젝트 종료였다. 그런데 python exe 만드는 과정이 생각보다 쉽지 않았다. 기존 서치했던 방법으로 main.py가 있는 디렉토리에서 cmd : Pyinstaller -w -F main.py 를 입력하여 exe 파일을 만들었지만 실행되지 않았다. "Failed to execute script" Error가 발생했다. 여러 방법을 찾다가 import 부분에서 잘못되었나 확인했지만 문제가 없었다. Pyinstaller를 uninstall 하고 개발자 버전의 Pyinstaller를 다시 설치하였다.(해당 문제가 여기서 발생했는지는 모르겠다) cmd : pip install https://github.com/pyinstaller/pyinstaller/archive/develop.zip

를 입력하면 developer version pyinstaller를 다운받을 수 있다. 

 

그 후 exe 파일이 되지 않아 해당 exe파일이 있는 곳에 main.py 를 같은 디렉토리에 넣어두었더니 해당 에러가 발생하지 않고 잘 실행되었다. exe파일을 공유하여 다른 컴퓨터에서 실행해봐도 잘 되는걸 확인할 수 있었다.

 

 

4. 결과

python으로 exe 파일을 생성하여 돌리는게 좋은 방법은 아닌 것 같다는 생각이 들었다. 또한 용량이 60MB 정도여서 간단한 실행 파일임에도 불구하고 큰 용량을 차지했다. 그리고 모듈을 import 하는데 시간이 걸려 실행 과정까지 시간이 상당히 소요되었다. 끝!

 

'Project' 카테고리의 다른 글

Google App Store 리뷰 크롤링  (1) 2020.07.09

댓글