본문으로 바로가기

키움 OpenAPI의 경우 다른 증권사의 COM 모듈과 달리 OCX (Object Linking and Embedding Custom Control) 방식을 사용합니다.


공식적으로 OpenAPI 자체에서 지원하는 언어는 아니지만, 파이썬에서도 해당 모듈을 로드하여 사용이 가능하긴 합니다.


일단 환경을 모두 만들어서 함수를 테스트 했는데..


동작을 안합니다.


분명 Login 창이 떠야 하는데


전혀 응답이 없습니다. 왜그러지.. 를 몇시간 동안 찾아보다


결과는 64bit 파이썬이 문제였음을 발견했네요ㅠㅠ


설치되어 있던 Anaconda3 64 bit 버전을 32 bit으로 변경하니 


ocx가 정상적으로 동작하는 것을 확인했습니다.




이제 기존에 사용하던 함수들을 테스트 해봐야겠습니다!


아래는 간단히 로그인 창을 실행하는 소스 입니다.


Github: https://github.com/ResetDy/Blog_Python/blob/master/loginTest.py


import sys
from PyQt5.QtWidgets import *
from PyQt5.QAxContainer import *

class MyWindow(QMainWindow):
    def __init__(self):
        super().__init__()
        self.setWindowTitle("DonDon Test")
        self.setGeometry(500, 500, 1000, 1000)

        self.kiwoom = QAxWidget("KHOPENAPI.KHOpenAPICtrl.1")

        btn1 = QPushButton("Login", self)
        btn1.move(20, 20)
        btn1.clicked.connect(self.btn1_clicked)

        btn2 = QPushButton("Click State", self)
        btn2.move(20, 70)
        btn2.clicked.connect(self.btn2_clicked)

    def btn1_clicked(self):
        self.login()


    def btn2_clicked(self):
        if self.kiwoom.dynamicCall("GetConnectState()") == 0:
            self.statusBar().showMessage("Not Connect")
        else:
            self.statusBar().showMessage("Connected")

    def login(self):
        self.kiwoom.dynamicCall("CommConnect()")

if __name__ == "__main__":
    app = QApplication(sys.argv)
    mywindow = MyWindow()
    mywindow.show()
    app.exec_()



댓글을 달아 주세요