본문 바로가기

지상제어시스템/PyQt5

PyQt란?

 나의 최종 목표는 드론의 자율주행이기 때문에 드론을 지상에서 제어할 수 있는 시스템을 만들어야한다. 비행중에 PID Gain값을 수정하거나 좌표를 통해 자율비행하고 현재 속력, 비행시간, 배터리 잔량 등등을 알 수 있게할 것이다. 그러려면 PC에서 GUI프로그램을 통해 사용자에게 입력받고 드론과 통신해야한다. GUI 프로그램 개발은 1학년 때 스마트팜 점프 업 캠프에서 조금 배웠지만 열심히하지않아서 잘 기억이 안난다. 그 때 PyQt를 썼었는데 다시 공부해서 PyQt로 GCS를 개발해보려한다.

 

PyQt란 뭔까?

Qt는 컴퓨터 프로그래밍에서 GUI 프로그램 개발에 널리 쓰이는 크로스 플랫폼 프레임워크이다.  -위키백과

- 크로스 플랫폼은 여러 종류의 컴퓨터 플랫폼에서 작동할 수 있다는 뜻이다.

 

Qt는 C++기반인데, PyQt는 Qt를 Python모듈로 변환해주어서 Python과 Qt로 쉽게 GUI프로그램을 개발할 수 있게 해준다. 나처럼 C++에 익숙하지 않은 사람을 빠르게 개발할 수 있기 때문에 좋다.

 

Qt Designer

프로젝트 규모가 작다면 화면 디자인을 직접 코드를 쳐서 개발할 수도 있겠지만 규모가 크다면 시간이 매우 오래 걸린다. 그럴 때 Qt Designer를 사용하면 편하게 개발할 수 있다. Qt designer는 사용자가 GUI 화면을 직접 확인하며 디자인할 수 있고 디자인한 것을 개발코드로 연결시켜준다.

 

환경 구축

1. pyqt5 설치 - pip install PyQt5

2. designer 설치 - pip install PyQt5-tools

3. visual studio code 설치 (다른 개발환경도 상관없음)

 

designer로 디자인을 한 파일은 .ui 확장자로 저장된다. 이 파일은 XML 형식의 파일이다.

파이썬은 XML형식의 파일을 바로 실행할 수 없으므로 파이썬코드로 변환해주어야한다.  

- pyuic5 -x 'XML파일명'.ui -o '출력할 파일명'.py

위 명령어로 파이썬 코드로 변환할 수 있다.

 

하지만 ui파일이 바뀔 때마다 파이썬 코드로 변환해주면 엄청 불편할 것이다. 게다가 이벤트 등의 추가로 코드를 작성해야한다면 절대 같은 파일에 작성하면 안될 것이다. 이럴 때는 하나의 main.py 파일을 만들고 ui파일을 

form = uic.loadUiType("~.ui")[0] 이렇게 변수에 담고  클래스를 만들어서 form을 상속받으면 된다. 그리고 추가적인 코드작성은 클래스를 이용하여 main.py에 작성해주면 된다.

main.py
//////////
import
sys from PyQt5.QtWidgets
import * from PyQt5
import uic
form = uic.loadUiType(
"~.ui")[0]

class MyWindow(QMainWindow, form):
    def __init__(self):
        super().__init__() //상속받은 클래스의 생성자 실행
        self.setupUi(self)

if __name__ == "__main__": #다른 파일에서 import된 것이 아닌 직접 실행됬을 때만 아래 코드를 실행
    app = QApplication(sys.argv)
    myWindow = MyWindow() #클래스 생성
    myWindow.show() 
    app.exec_() #이벤트 루프 생성

실행할 때는 터미널에서 python .\main.py를 입력해주면 된다(파일의 경로 확인해야 됨).

 

 

+.qrc로고 파일을 .py로 변환

  • pyrcc5 image\logo.qrc -o logo_rc.py