본문으로 바로가기

파일의 IT 블로그

  1. Home
  2. 프로그래밍/Python
  3. [Python] PyQt5 학습 정보, 쓰레드 작업 등 정보 모음

[Python] PyQt5 학습 정보, 쓰레드 작업 등 정보 모음

· 댓글개 · KRFile

PyQt5 쓰레드 이용하여 GUI 응답없음 방지하기 (Best Example)

https://ybworld.tistory.com/39?category=929856 

 

[Python/파이썬] PyQt5 사용시 필요한 쓰레드 개념 이해 : 파이썬 GUI 응답없음 해결 방법 - 2

※ 이 글을 쓰는 사람은 SW 비전공자입니다. ※ 개인 공부를 위해 정리하는 글이며, 작성한 코드들은 효율성, 깔끔함(?) 등과는 거리가 멀 수 있습니다. 1편 : 2021.03.06 - [코딩/Python] - [Python/파이썬]

ybworld.tistory.com

 

Pyside6에서 Material(Modern) Design하기

https://www.youtube.com/watch?v=Jn0PpzB14Y8 

https://www.youtube.com/watch?v=9DnaHg4M_AM 

PyQT에 CSS 적용해서 Visual Studio 따라하기

https://blog.naver.com/dhksrl0508/222344023916

 

PyQt StyleSheet로 Visual Studio UI를 만들어보자

마이크로소프트는 UI를 정말 잘 만드는 것 같습니다. 학교 공부로 Visual C++ 실습을 진행하는데, 우연...

blog.naver.com

 

<기타 정보들>

https://www.youtube.com/watch?v=rpWzUj1M4E8 

 

https://martinii.fun/145

 

0. 2021년, 드디어 PyQt6와 PySide6가 릴리즈되었습니다.

파이썬 GUI 라이브러리의 선두주자 Qt for Python 6 릴리즈 드디어 PyQt6 배포와 함께 Qt for Python, 즉 PySide2가 PySide6라는 이름으로 배포되었습니다(재미있게도 PyQt6가 올 1월 배포되었는데, PySide6는 작..

martinii.fun

 

PYQT 속성강좌 - PYQT 처음 배우면 사실상 가장 유용한 강의라고 생각됨

https://www.youtube.com/watch?v=yPgQ0N6gdhI 

https://wikidocs.net/21849

 

01. 소개 (Introduction)

- PyQt5 툴킷의 기본적인 기능들에 대해 다룹니다. - 제공되는 예제 코드들은 파이썬3으로 작성되고 Windows, macOS 환경에서 테스트되었습니다. # ...

wikidocs.net


파이썬 PyQT(or Pyside)는 정보도 없고 자세한 내용 없이 다 추상적인 내용밖에 없어서 GUI 구현을 포기했었는데 이번에 파편화된 자료들을 여러개 끌어모아서 이론보단 기능 중심구현으로 학습을 해봤습니다. (즉 그냥 추상적으로 공부를 했다 이말이죠.)

 

특히 바로 위에 있는 STACK CODING님의 영상이 꽤 많은 도움이 됬습니다.

솔직히 말하면 파이썬의 객체지향을 제대로 학습하지 않아서 self개념도 햇갈리고

 

PyQt 프레임워크의 동작원리도 정확히 몰라서 그냥 디자이너로 미리 만들어진 부분에 이벤트 리스너 추가하고 함수정도만 추가해서 쓰고 있습니다.

 

GUI 구현하는덴 문제가 없는데 하나하나 다 알고 싶은 제 성격상 그렇게 마음에 들진 않네요. 책도 몇개 있는거 같은데 대부분 설명들이 구체적이지 않고 좀 추상적입니다

 

파이썬 자체가 컴파일 언어가 아니라 인터프리터 언어라 속도도 느리고

GUI 구성하는것도 자체적으로 지원하는 모듈 tkinter 이 있긴한데 기능이 제한적이고 좀 구립니다

GUI가 있는 상업용 프로그램을 만들려면 좀 거리가 멀어요

 

그래서 pyqt 또는 pyside 를 쓰는게 거의 정설인데

QT 디자이너로 gui 디자인을 만들고 만들어진 ui 파일을 pyuic5로 py로 변환하고

그 py파일을 IMPORT 후 상속시켜서 창을 여는 형태로 진행해야 합니다.

 

C# 처럼 GUI 를 실시간으로 만들면서 더블클릭하고, 소스코드 넣고 이런게 안된다는거죠..

솔직히 불편합니다 ㅜ ㅜ GUI 변경사항이 많을수록 ui를 py로 변환하는 작업이 점점 귀찮아져요.

 

방금 알았는데 소스로 그냥 ui를 불러와주는 함수가 있더군요 반환값만 저장해서 class 로 상속시켜주면 끝.

그래도 이정도 불편함만 감수하면 파이썬의 간편 기능을 모두 사용할 수 있으니 이건 꽤 큰 장점이죠.

 

일단은 PyQt5에서 멀티 쓰레드도 Qthread로 자체적으로 지원을 하고 Qt 프레임 워크가 제가 알기론 C++로 구현되어서 성능은 그다지 나쁘지 않습니다. 근데 파이썬 위에서 돌아가서 성능이 엄청 훌륭하다곤 못하겠네요 제가 알기론 아마 electron 보단 성능이 좋다고 하는데 안해봐서 잘 모르겠네요.

 

C#의 경우 GUI가 뻗어버리는 문제 때문에 쓰레드로 작업을 할때 쓰레드에서 GUI에 있는 요소들을 접근하거나 값을 변경하는걸 허용하지 않고 Delegate 라는것을 써서 안전하게 접근을 했는데 일단 QThread 를 쓸때는 GUI에 있는 요소의 값 변경을 허용하는거 같습니다.

 

문제는 완벽하지가 않아서 쓰레드에서 딜레이 없이 텍스트를 마구 바꾸면 텍스트가 깨져버린다던가 하는 문제가 생깁니다.. 그래서 쓰레드에서 GUI를 접근할때 0.01초씩 딜레이를 준다던가, 변경하는 부분만 이벤트 리스너를 달아서 함수랑 연결시키면 해결이 됩니다.

 

=> 이 부분은 그냥 제가 잘 몰랐던거 같습니다. Thread Safe하게 프로그래밍을 하려면 Qt문법에서 지원하는 Signal 과 Slot을 이용해서 Update 하면 됩니다. 사실 Thread로 만드는 것 보다는 비동기로 만들고 싶은 마음이 더 큰데 이 부분은 머리를 굴려봐도 답이 잘 안나와서 그냥 포기했습니다..

 

일단은 프로젝트를 하나 진행중인데 제대로 된 프로그램을 하나 만들어봐야 감이 좀 잡힐거 같습니다.

 

 

SNS 공유하기
💬 댓글 개
이모티콘창 닫기
울음
안녕
감사해요
당황
피폐

이모티콘을 클릭하면 댓글창에 입력됩니다.