Post

(PyQt6)0. Python GUI + 해석 프로그램 만들기 개요

VS + C#이나 electron 같이 pyQt6 보다 좋은 GUI툴은 많지만 python 밖에 할 줄 모른다면 pyQt6는 간단한 GUI 만들 때 나쁘지 않다.

  • 우선 크로스플랫폼이 된다.
    • 대신, window에서 빌드해서 mac에서 보면 폰트 등의 UI가 다르게 보이기 때문에 cross-platform 을 지원하면서 UI 가 중요하다면, sys.platform == "win32"와 같은 플랫폼 체크를 해서 플랫폼별 스타일을 적용하면 된다.
    • raspberry pi 같은 임베디드(?) 디바이스의 경우 pyQt5를 더 많이 사용하는 경향이 있다.
  • html/js/css 몰라도 pyside2-uic혹은 pyside6-uic으로 drag&drop으로 UI를 꾸밀 수 있다.
  • QWidgets으로 위젯을 만드는 게 귀찮다면, xlwings 같은 라이브러리로 엑셀파일 값을 읽어오는 방식으로 구현해도 좋다.
  • 코딩에 익숙하지 않은 사람에게는 다른 GUI 보다 그나마 접근하기 편하다.
    • Visual Studio의 경우, 회사에서는 유료이기 때문에 비개발직군이 사용하기 쉽지는 않다.
    • Js + npm로 시각화하는 방식도 있다. 하지만 웹 프로그래밍이 익숙하지 않으면 환경세팅이 번거로운 반면에 파이썬은 일부 라이브러리 설치만 해두면 다른 기능이 필요없다.
      • 그리고 데이터 분석쪽은 Python이 가장 활성화되어 있으며
      • 코드에 미숙할 경우 Jupyter notebook으로 구간별 테스트할 수 있는 python이 상대적으로 편하다.

이번 pyQt6에 관한 글은 개인 프로젝트를 만들면서 겪었던 시행착오들 위주로 적을 예정이다.

pyQt6는 pyQt5 제공하는 기능은 비슷하나 구현방법에서 차이가 있을 수 있다. setsizePolicy(), QSizePolicy 코드가 그 예시다.

1
2
3
4
5
6
# pyqt5
  QtWidget().setSizePolicy(
        QtWidgets.QSizePolicy.Expanding, QtWidgets.QSizePolicy.preferred) 
# pyqt6
  QtWidget().setSizePolicy(
        QtCore.Qt.QSizePolicy.Policy.Expanding, QtCore.Qt.QSizePolicy.Policy.preferred)

위와 같이 PyQt6에서는 옵션, Flag 같은 부분에서 좀 더 세분화가 되어 있어 pyQt5 문법을 그대로 사용하기는 어렵다..

다음 내용들 위주로 작성해볼 예정이다.

  1. attr 메소드와 python class 특징(overload가 안 된다는 특징 등)
  2. sqlite3pyqt
  3. pyside6-uic와 동적 UI 생성
  4. excel 해찾기 기능을 scipy로 구현
  5. UI 꾸미기(.setStyleSheet()로 안 되는 그림자, 애니메이션 제외)
  6. QThread 활용하기
  7. xlwings 라이브러리로 .csv파일 몽땅 차트로 옮겨버리기.
  8. xlwings로 값을 받고 pyqtgraph로 그래프 그리기
  9. pyqtgraph 로 시각화해보기(heatmap, sigMouseMoved 등등 활용)
  10. 라이브러리 커스텀마이징하기

여기서는 Menu 바 등을 안 다룹니다.

Index

  • Hello PyQt6!
    • PyQt6 설치 및 실행해보기
    • pyside2/6-uic.exe 대해서 알아보기
  • PyQt6 위젯 종류와 예제들 내가 사용해봤던 것들 위주로
    • QWidgets
    • QDialog
    • QLabel
    • QLineEdit
    • QPushButton
    • QProgressbar
    • QScorllArea
  • PyQt6 꾸며보기
    • setStyleSheet() 선에서 처리할 수 있는 것들
      • hover, color, z-index등
      • 부모태그 스타일은 자식 스타일에 자동으로 반영
    • 처리할 수 없는 것들
      • shadow
      • animation
    • setSizePolicy에 관해서…
    • QSpacer를 쓰지마세요.
    • MVVM? 지키기
  • PyQt6와 UI 동적으로 만들기
  • PyQt6와 QThread 활용하기
    • + scipy 페이지 따로 만들기
    • 활용 사례 : Progressbar + 계산툴
  • pyqtgraph vs matplotlib
  • xlwings에 대해서 배우기
    • vbs 안 써도 됩니다.
    • 위젯 디자인 꾸미기 귀찮으면 이걸로 데이터 전처리 다 해도 됩니다.
  • 예제 프로젝트
    • numpy/pandas + pyqtgraph + xlwings + scipy + sklearn 데이터 시각화툴
This post is licensed under CC BY 4.0 by the author.