:::: 개발 ::::/:::: PYTHON(파이썬) ::::

20210925 파이썬 자동매매 키움 API 로그인 실습

nayha 2021. 9. 25. 23:07
반응형
import sys
from PyQt5.QtWidgets import *
from PyQt5.QtGui import *
# 파이썬에서 키움증권의 클래스를 사용하려면 PyQt의 QAxWidget 클래스를 사용해 인스턴스를 생성
from PyQt5.QAxContainer import *

class MyWindow(QMainWindow):
    def __init__(self):
        super().__init__()
        self.setWindowTitle("PYSTOCK")
        self.setGeometry(300,300,300,400)
        
        # QAxWidget 클래스의 인스턴스
        # QAxWidget 클래스는 QWidget / QAxBase 상속받음 
        # QAxWidget 요거 하나로 QWidget / QAxBase 정의된 메서드 사용가능
        self.kiwoom = QAxWidget("KHOPENAPI.KHOpenAPICtrl.1")

        bnt1 = QPushButton("로그인",self)
        bnt1.move(20,20)
        # 이벤트와 이벤트를 처리할 메서드를 connect라는 메서드로 연결
        bnt1.clicked.connect(self.loginClick)

        bnt2 = QPushButton("로그인 체크",self)
        bnt2.move(20,70)
        bnt2.clicked.connect(self.loginCheck)


    def loginClick(self):
    	# 인스턴스를 통해 CommConnect 메서드를 호출하기만 하면 
        # 로그인을 위한 윈도우가 자동으로 실행 / 반환값으로 로그인 여부 체크
        # 리턴 0 성공 , 음수 실패
        ret =self.kiwoom.dynamicCall("CommConnect()")
        
    def loginCheck(self):
    	# 0 미연결/ 1 연결완료
        if self.kiwoom.dynamicCall("GetConnectState()") == 0:
            self.statusBar().showMessage("접속 안됨")
        else:
            self.statusBar().showMessage("접속중")

if __name__ =="__main__"        :
    app = QApplication(sys.argv)

    mywindow = MyWindow()
    mywindow.show()
    
    app.exec_()

실행화면

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

class MyWindow(QMainWindow):
    def __init__(self):
        super().__init__()
        self.setWindowTitle("PYSTOCK")
        self.setGeometry(300,300,300,150)

        self.kiwoom = QAxWidget("KHOPENAPI.KHOpenAPICtrl.1")
        # CommConnect 메서드를 MyWindow 클래스의 생성자에서 호출했습니다. 
        # 따라서 윈도우가 생성됨과 동시에 로그인 창도 함께 화면에 표시
        self.kiwoom.dynamicCall("CommConnect()")

        # self를 사용하는 이유는 클래스의 다른 메서드에서도 해당 변수를 사용해 객체에 접근하기 위해서
        #  event_connect 메서드에서도 사용되기 때문에 text_edit가 아니라 self.text_edit
        self.text_edit = QTextEdit(self)
        self.text_edit.setGeometry(10,60,200,80)
        #읽기/쓰기 모드를 변경하기 위해 setEnabled
        self.text_edit.setEnabled(False)
        # OnEventConnect  이벤트가 발생하면 event_connect 메서드 실행..
        # 이벤트와 이벤트 처리 메서드를 연결할 때는 connect 메서드를 사용
        self.kiwoom.OnEventConnect.connect(self.event_connect)

    # 메서드의 첫 번째 인자는 인스턴스를 의미 두 번째 인자로 nErrCode에 해당하는 값을 받으면 됩니다
    def event_connect(self ,err_code):
        if err_code == 0:
            self.text_edit.append("로그인 성공")

if __name__ =="__main__"        :
    app = QApplication(sys.argv)

    mywindow = MyWindow()
    mywindow.show()
    
    app.exec_()

로그인 전 실행 화면
로그인 성공 후 키움 API 이벤트( OnEventConnect ) 받아온 화면

반응형