안녕하세요?


지난번 포스팅에서 어떻게 해서 QTheadPool안에 있는 globalInstance()를 실행시켜서, 일단 제 경우에는 같은 스크립트 안에 있는 다른 클래스를 실행시키는 것 까지는 성공했습니다. 이제는 이 클래스에서 while문을 사용하는 새로운 무한 반복 루프를 작동시킬 차례입니다.



먼저 해야할 일은 한번 파이참(PyCharm)에서 디버그를 작동시켜서 왜 pytrader2가 실행이 되지 않는가 했는데, 위 스크린샷처럼 self.Runnable = Runnable()에서 계속 루프를 돌기 때문이라는 것을 확인할 수 있었습니다.



그래서 루프의 원인이 되는 코드를 아예 주석처리를 하도록 했습니다.



다음으로는 run()이라는 Runnable클래스 안에서, 위 스크린샷에 보이는 것처럼 QMetaObject라는 메서드를 사용, invokeMethod라고 해서 signal이 없어도 slot인 메서드를 실행시킬 수 있다는 메서드를 사용할 듯 합니다.




처음에는 데코레이터라고 해서, @pyqtSlot()만 붙이면 메서드를 실행시킬 수 있을 줄 알았습니다만, 실제로는 잘 되지 않아서 pyside라는 새로운 라이브러리를 설치하고자 합니다.



그런데 문제는 pyside의 설치가 그냥은 되지 않는 것을 확인할 수 있었습니다.



그래서 pip install -U pyside라는 식으로 아나콘다 프롬프트에서 입력을 해서 설치를 하고자 합니다만.....



이것 역시 제대로 작동이 되지 않는 것을 확인할 수 있었습니다.




그래서 위 스크린샷처럼 pip install pyside2라는 명령어를 입력해서, 더 이상은 지원이 되지 않는 pyside를 그만 사용하고, 이제는 pyside2라는 라이브러리를 가상환경에 설치하도록 합니다.



그리고 나서 위 스크린샷처럼 pyside2를 import하도록 하고, 이제 invokeMethod()라는 함수로 실행시키고자 하는 메서드를 슬롯으로 지정해 주기 위해서 이제 @QtCore.Slot()이라는 데코레이터만 붙이면 완성이 되리라 생각을 했습니다.



그러나 pyside2까지 가지고 오고나서도, 제대로 된 이 데코레이터는 작동을 하지 못하는 것을 확인할 수 있었습니다. 일단 제가 인터넷상에서 찾아낸 정보에 의하면, 여기서 QMetaObject에서 invokeMethod()를 쓰는 것이지만, 이건 도저히 제가 어떻게 할 수 없다는 결론을 내렸습니다.

+ Recent posts