만든 파이썬 코드를 파이썬이 설치되 있지 않은 컴퓨터에서도 간단하게 사용할 수 있도록 실행 파일로 만들어 보자

auto py to exe는 Pyinstaller를 편리하게 사용할 수 있도록 만들어진 UI이므로 우선 Pyinstaller를 설치하자



Pyinstaller

py to exe 모듈은 다양하다. 그 중 간편한 Pyinstaller를 이용해 보겠다.


우선 설치를 하자 하단의 명령어를 명령 창에 입력한다.


pip install Pyinstaller


다음 PyQt5를 빌드하기 위해 C:\Users\Been\Anaconda3\Lib\site-packages\PyQt5\qt\bin를 환경 변수로 등록합니다.


*환경 변수를 등록했지만 PyQt5에서 에러가 난다면 PyQt5와 PyQt5-sip 파일의 설치 위치를 알아보자

 PyQt5를 uninstall하고 다시 설치하면 PyQt5-sip과 함께 설치되며 설치 디렉터리를 알려준다.






Auto py to exe

이제 Auto py to exe를 설치해 보겠다.


명령 창에 하단의 명령어를 입력한다.


pip install auto-py-to-exe


설치가 끝나면 명령창에 auto-py-to-exe를 입력해 프로그램을 실행한다.




gui파이썬 코드를 선택한다.


onefile은 파일을 exe파일 하나로 출력할 것인지 부가적으로 나오는파일을 그대로 출력할 것인지 설정하는 옵션이다.

one File을 클릭하자


Console Window는 명령 창을 띄울것 인지 설정하는 창이다.

도스 창으로 print시켜 코드 흐름을 확인하고 싶으면 Console Based를 아니면 깔끔하게 Window Based (hide the console)을 클릭한다.




만약 gui 파이썬 코드 이외에 import된 다른 파이썬 코드가 있다면 Additional Files에서 파일 또는 폴더 전체를 추가한다.



GUI를 이용하다 보면 코드가 도는 동안 GUI가 응답 없음 상태가 됨을 확인할 수 있다.

이 현상을 없애기 위해 쓰레드를 나누어 코드가 돌아가는 동안 GUI도 함께 돌려 해결해보자



Thread

쓰레드(Thread)란 하나의 프로세스안에 일을 병렬로 처리하는 단위

자세한건 나중에 시스템 프로그래밍을 공부하며 다시 쓰겟다.



우선 쓰레드 Class를 정의해 준다.

쓰레드를 통해 돌리고 싶은 코드를 run함수에 작성한다.


1
2
3
4
5
class ThreadClass(QtCore.QThread): 
    def __init__(self, parent = None): 
        super(ThreadClass,self).__init__(parent)
def run(self): 
#~~~~~
cs


다음 GUI class에 __init__ 부분에서 쓰레드 Class를 이용해 쓰레드 변수를 정의한다.


1
2
3
class Ui_MainWindow(object):
    def __init__ (self, parent = None) :
        self.threadclass = ThreadClass() 
cs



마지막으로 쓰레드를 사용하고 싶은 곳에서 쓰레드를 실행 해 준다.


1
self.threadclass.start() 
cs



그러면 이제 GUI가 잘 돌아갈 것이다





'파이썬 > Pyqt5를 이용한 GUI' 카테고리의 다른 글

Pyqt5를 이용한 GUI - 버튼설정  (1) 2019.02.02
Pyqt5를 이용한 GUI  (0) 2019.02.02

Qt designer를 이용해 간단하게 인터페이스를 만들었다면 이제 인터페이스에 우리가 원하는 기능을 넣어 보자



버튼 클릭

버튼을 만들어도 클릭 시 이벤트가 발생하지 않으면 무용 지물이다.


self.pushButton.clicked.connect(self.btn1_clicked)를 입력해 준다.


1
self.pushButton.clicked.connect(self.btn1_clicked)  
cs


또한 클래스내 btn1_clicked함수를 정의해 주면 버튼 클릭 시 btn1_clicked함수를 실행하게 된다.


1
2
class MyWindow(QMainWindow, form_class):
    def btn1_clicked(self):
cs




버튼 활성화 비활성화

버튼을 입력하면 필요 시 까지 버튼을 비 활성화해 클릭을 불가능하게 할 수도 있다.


1
self.pushButton.setDisable(True)
cs




반대로 활성화 하고 싶으면

1
self.pushButton.setEnable(True)
cs






만든 파이썬 프로그램을 편하게 사용할 수 있도록 GUI를 만들어 보자



PyQt5

먼저 PyQt5를 설치해 보자

Amaconda prompt를 실행 해 하래 명령어를 입력한다.


pip install pyqt5


PyQt5는 Qt designer하는 Ui를 지원해 보다 편하게 내가 원하는 GUI를 만들 수 있다.




Qt designer


그럼 Qt designer를 이용해 GUI를 만들어 보자

실행 방법은 2가지가 있다. 


1. 아나콘다 설치 디렉터리(C:\Users\Been\Anaconda3\\Library\bin)로 가서 designer.exe 파일을 찾아 실행시킨다.

* 설치 디렉터리는 다를 수 있다.

2. Amaconda prompt를 실행 후 designer를 입력한다.


두 가지 중 편한 방식을 사용하자



이후 원하는 위젯을 배치 하고 속성 탭을 이용해 GUI를 만들고 저장하자




그러면 .ui라는 파일로 저장이 가능하다. 이제 이 파일을 파이썬 코드로 변환 시킬 것이다.





파이썬 코드로 변환


.ui 파일은 XML언어로 구성되어 있다. 그래서 우리는 XML코드를 파이썬 코드로 변환 시켜 줘야 한다.

(아직 XML언어에 대해 잘 모른다... 나중에 따로 공부하자)


변환 방법은 우선 C:\Users\Been\Anaconda3\Lib\site-packages\PyQt5\uic 파일로 가자


변환할 .ui파일을 해당 디렉터리에 복사를 한다.




해당 디렉터리에서 Shift + 마우스 오른쪽 버튼 으로 [여기서 명령 창 열기]를 클릭해 간편하게 필요한 주소로 명령 창을 연다.


명령 창에 하단의 명령어를 입력해 변환시킨다.


python -m PyQt5.uic.pyuic '.ui파일명.ui' -o '원하는 파일명.py'





그러면 C:\ProgramData\Anaconda3\Lib\site-packages\PyQt5\uic 디렉토리에 .py파일이 생성된 것을 볼 수 있다.



+ Recent posts