안녕하세요?


어디가 문제인지 알아보니, 일단 파이썬의 경우에는 GUI프로그래밍을 할때 while과 같은 무한 루프문을 사용하면 그대로 프로그램이 얼어버린다는 문제가 있습니다. 그래서 이 문제를 해결하고자 자료를 검색하고 다양한 시도를 했는데, 오늘은 그 시도중에 하나인 QRunnable()을 사용해서 다른 class에 있는 메서드로 만들어서 사용하는 방법을 일단 연습하였고, 그 연습내용을 포스팅 하고자 합니다.



먼저 작업을 원활하게 하기 위해서, 위 스크린샷과 같이 PyQt5에서 QtGui, QtCore, QtWidgets를 import하도록 만들어 줘 봅니다.



다음으로는 원래 Class를 선언하는 괄호 안에는 QMainWindow가 들어가야 하는데, 이걸 QtWidgets.QWidget으로 바꾸어 주도록 합니다.



그리고 나서 실행을 위한 구문에서도 위 스크린샷과 같은 방식으로 QApplication앞에다가 QtWidgets를 붙여 주도록 합니다.



이러한 노력에도 불구하고, 이번에는 제대로 작동이 되던 프로그램마져도 제대로 GUI를 띄우지 못하고 에러 메세지가 뜨는  것을 볼 수 있었습니다.




그래서 위 스크린샷처럼 setpuUi에 QtWidgets.QWidget()을 집어넣어 주도록 합니다. 이렇게 하면 상황이 나아지리라 생각을 하고 실행을 했습니다.



그러나 이번에는 아예 Qtdesigner에서 디자인을 해서 Ui파일로 분명히 넣어 주었는 lineEdit이 아예 인식이 되지 않는 현상을 볼 수 있었습니다.



그래서 아예 바뀌었는 것을 도로 원래대로 돌려놓고서, 그냥 최소한의 변화만으로 제가 원하는 것을 얻을 수 있는지에 대해서 알아 보고자 합니다.



먼저 ParentPytrader의 초기화를 하는 메서드에서 super()안에 원래는 제가 비워주었는데, 이번에는 위 스크린샷과 같은 요소들을 집어넣어 주돌고 합니다.




그리고 나서 pytrader2를 작동시키기 위한 작업을 시작하도록 합니다. 먼저 self가 붙은 메서드에서 메서드를 넘나들 수 있는 변수에다가 Runnable(self)를 집어넣어 주도록 합니다. 그리고 나서 QTheadPool.globalInstance().start()라는 메서드를 이용합니다. 여기서 Runnable(self)는 바로 다음에 나올 같은 스크립트 파일안에 있는 다른 class의 이름이며, 이 클래스를 실행시키는 방법입니다.



그리고 나서 위 스크린샷처럼 이름이 진짜로 Runnable이라는 클래스를 생성해서 위 스크린샷처럼 Hellow?!라는 문구가 나오도록 만들어 주도록 합니다.



일단 실행을 시킨 결과, 제대로 나오는 것은 확인을 할 수 있는데, run()이라는 메서드가 없어서 에러 메세지가 뜨는 것을 확인할 수 있었습니다.



그래서 이번에는 run()이라는 메서드를 만들어 주도록 해서, 한번 Runnable이라는 클래스에 만들어 주도록 하고, 여기서 문구를 출력할 수 있도록 만들어 줍니다.



이번에는 제대로 실행이 되어서 아무런 에러 메세지가 없는 것을 확인할 수 있기는 있었습니다. 이제 이 단계가 끝이 났으니, 이 QTheadPool에서 pytrader2를 실행시키는 과정에 들어가 보기는 봐야 하는데, 지금와서 생각해 보면, 이게 또 다른 고생의 시작이기는 했습니다.

+ Recent posts