-
[키움 OpenApi]AttributeError: 'QAxWidget' object has no attribute 'OnEventConnect' 해결한 방법Python 키움 OpenAPI 2023. 11. 1. 22:20반응형
self.ocx = QAxWidget("KHOPENAPI.KHOpenAPICtrl.1") self.ocx.dynamicCall("CommConnect()") self.ocx.OnEventConnect.connect(self.loginResult)
구글링을 해보니 해당 에러는 API로의 접속을 할 수 없어서 일어난 현상이라고 함.
그 원인에는 키움API는 python 3버전 32bit를 사용해야 정상적으로 통신을 할 수 있는데
64bit로 설치한 것이 원인이라 하여 수차례 시도하여 결국 해결하였다.
1. 최신버전 아나콘다 64bit 설치를 한다.
https://www.anaconda.com/download
2. 설치 완료 후 anaconda prompt을 실행한다.
3. 현재 64비트 상태이므로 32비트로 설정을 변환하고, api용 환경을 추가한다.
set CONDA_FORCE_32BIT=1 //32비트 설정. 해제는 =0 conda create -n ENV_NAME //ENV_NAME이라는 이름으로 새로운 환경 생성
4. 환경을 추가하였다면 추가한 환경으로 변환하고 python을 설치한다.
activate ENV_NAME // ENV_NAME 활성화 conda install python
5. 새로 추가한 환경위치로 가서 phthon.exe를 열어 32비트로 설치되었는지 확인하기
6. 필요한 library들을 설치한다.
이 과정을 반복하다보니 (안되면 제거 후 처음부터 다시)
어느순간 해결이 되었다.
import sys from PyQt5.QtWidgets import * from PyQt5.QAxContainer import * class MyWin(QMainWindow): def __init__(self): super().__init__() self.loginEvent() self.setWindowTitle("pyStock") self.setGeometry(300,300,300,150) self.text_edit = QTextEdit(self) self.text_edit.setGeometry(10,60,280,80) self.text_edit.setEnabled(False) #CommConnect(사용자 호출) -> 로그인창 출력 -> OnEventConnect(이벤트 발생) def loginEvent(self): self.ocx = QAxWidget("KHOPENAPI.KHOpenAPICtrl.1") self.ocx.dynamicCall("CommConnect()") self.ocx.OnEventConnect.connect(self.loginResult) def loginResult(self, err_code): """ err_code 100 : 사용자 정보교환 실패 101 : 서버접속 실패 102 : 버전처리 실패 """ if err_code == 0 : self.text_edit.append("로그인 성공") elif err_code == 101 : self.text_edit.append("정보교환 실패") elif err_code == 102 : self.text_edit.append("서버접속 실패") elif err_code == 103 : self.text_edit.append("버전처리 실패") if __name__ == "__main__": app = QApplication(sys.argv) window = MyWin() window.show() app.exec_()
멀리도 돌아왔다. 여기저기 찾아보며 맨땅헤딩 끝에 해결했다는 만족감을 얻어가며 이만 마칩니다.
반응형