pyinstaller 의 버전이 정확하지 않은 경우가 오류의 원인일 가능성이 높다.

pyinstaller 를 실행시키면 

맨 윗부분에 pyinstaller : ... python : .... 과 같은 버전이 명시된다.

초기에 pyqt4 같은 낮은 버전을 사용했다던가

pyinstaller 를 설치할떄 pip install Pyinstaller , sudo apt-get install python-Pyinstaller 로 설치했다면

pyinstaller 는 python 2.x 의 버전을 사용하게 된다.

PyQt5 는 python3 을 기준으로 작성되므로

pip3 , python3 으로 설치해서 사용하자.

 

pip3 install Pyinstaller

sudo apt-get python3-Pyinstaller

 

'python > pyqt5' 카테고리의 다른 글

pyinstaller 후 sip , PyQt5.sip 오류  (0) 2020.01.09
PyQt5 를 이용한 간단한 GUI 만들기  (0) 2019.11.14

window 에서는 아직 이 오류를 접해보지 못했다.

Linux 기준 pyinstaller 후 실행시키면

'no module named sip'

'no module named PyQt5.sip'

와 같은 오류가 발생한다면

 

이 경우는 PyQt5를 설치하면서 같이 설치되는 sip를 pyinstaller 로 실행파일 변환하는 과정에서

찾지 못하는거 같은데 --hidden-import=sip 와 같이 히든옵션을 추가해주면 해결할 수 있다.

'python > pyqt5' 카테고리의 다른 글

pyinstaller 후 no module named PyQt5...  (2) 2020.01.09
PyQt5 를 이용한 간단한 GUI 만들기  (0) 2019.11.14

(본 포스팅은 window 사용자 및 visual studio 를 기준으로 작성되었습니다)

pyqt5 -> python GUI 를 작업할 수 있는 프레임워크

 

pyqt5 설치

- pip install PyQt5

 

pyqt를 사용하려면 qt designer(GUI 디자이너) 가 필요

pyqt designer 설치

- pip install PyQt5_tools

 

디자이너부터 실행해보자

designer.exe 위치

- ...Python\Python375\Lib\site-packages\pyqt5_tools\Qt\bin

자주 사용할 예정이라면 바로가기를 하나 만들어두는게 효율적!

 

딱히 건드릴 부분이 없다. Create!

허전하니 간단하게 몇가지 넣어보자

MFC 와 거의 똑같다

원하는 것들을 드래그로 Dialog에 가져오면 된다.

push Button이랑 textEdit 을 가져와봤다.

pushButton 이나 textEdit 은 하나의 객체를 뜻하고 나중에 python 으로 pyqt 코드를 만질 때 건드릴 수 있다.

 

pyqt의 기본 작동원리

 

python 코드에서 위의 .ui 에 대한 정보를 가져오면

ui 에 있는 모든 객체들을 사용할 수 있다.

초기함수인 _init_ 에서 시그널을 , 그에 맞는 슬롯을 설정한 후

exec_() 를 통해 *중요 eventLoop(무한) 에 진입하게 되고

이 루프가 돌아가는 동안 이벤트(ex : 버튼클릭과 같은 init 에서 설정한 시그널)가 발생하면

슬롯(= 함수) 이 작동되고 gui 에 보여지게 된다.

 

위의 설명을 간단한 코드로 설명해보자면

pushButton 을 누르면 textEdit 에 hello world! 를 출력해보자

 

가장 먼저 현재 보고있는 디자이너.ui 를 자신이 사용하고 있는 편집기의 프로젝트에 저장해주자

나는 hello.ui 로 저장하였다.

소스를 살펴보자

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
import sys
 
# PYQT5 를 이용하기 위한 모듈갱신
from PyQt5.QtWidgets import *
from PyQt5 import uic
 
# 불러오고자 하는 .ui 파일
# .py 파일과 같은 위치에 있어야 한다 *****
form_class = uic.loadUiType("hello.ui")[0]
 
class MyWindow(QDialog, form_class):
   
# 초기 설정해주는 init
   def __init__(self):
       super().__init__()
       self.setupUi(self)
# 시그널(이벤트루프에서 발생할 이벤트) 선언
# self.객체명.객체함수.connect(self.슬롯명)
 
# 시그널을 처리할 슬롯
   def btn_click(self):
       self.textEdit.setText("hello world!")
 
if __name__ == "__main__":
   app = QApplication(sys.argv)
   # myWindow 라는 변수에 GUI 클래스 삽입
   myWindow = MyWindow()
   # GUI 창 보이기
#########################
# 이벤트루프 진입전 작업할 부분
#########################
 
# 이벤트루프 진입
   app.exec_()
 
http://colorscripter.com/info#e" target="_blank" style="color:#e5e5e5text-decoration:none">Colored by Color Scripter

이벤트루프에 진입하게 되면

프로세서는 무한적으로 이벤트발생을 기다리게 된다.

pushButton 을 클릭하는 행동 자체가 객체를 작업하는 행동이므로 이벤트가 발생하게 된다

대기 ->pushButton click -> 이벤트발생 -> 지정한 슬롯을 작업 -> 작업이 완료되면 결과를 GUI 에 띄움 -> 대기

 

처음공부하시는 분들께 도움이 되었으면 한다.

'python > pyqt5' 카테고리의 다른 글

pyinstaller 후 no module named PyQt5...  (2) 2020.01.09
pyinstaller 후 sip , PyQt5.sip 오류  (0) 2020.01.09

+ Recent posts