[크롤링(crawling) 데이터] GUI 전시 및 모니터 스크린 정 가운데 전시하기
본문 바로가기

주식 자동매매 강의/중급반(시황 및 차트 구현)

[크롤링(crawling) 데이터] GUI 전시 및 모니터 스크린 정 가운데 전시하기

반응형

이전 강의에서 ADR 지표를 가지고 있는 사이트에서 코스피/코스닥 ADR 정보만 가지고 온 거 기억하시죠? 오늘은 그 정보를 GUI 전시해보도록 하겠습니다.

 

1. 크롤링 데이터 GUI 전시 개념 정립

 (1) ADR 값 GUI 전시

  아래 그림을 보시면, 특정 크기의 윈도우(GUI)에 우리가 원하는 코스피/코스닥 ADR 값(61.44, 58.25)을 전시하였습니다. 물론 그 외에 공격적 투자 가능. 비중 200퍼센트라는 말도 포함되었지요. 이렇게 본인이 원하는 크롤링 값과 본인의 생각을 사용자들이 손쉽게 볼 수 있도록 하는 것이 GUI 전시하기입니다.

ADR 정보 GUI에 전시
ADR 정보 GUI에 전시

 (2) GUI 값 스크린 정 가운데 전시하기

  아래 그림을 보시면 화면 정 중앙에 우리가 원하는 값을 정렬하였죠? 아래 그림 조금 어지러울 수 있지만 잘 설명드릴 테니 따라오시기 바랍니다.

GUI 값 스크린 정 가운데 전시하기
GUI 값 스크린 정 가운데 전시하기

 - GUI를 만들면 (1)과 같이 좌측 상단에 위치하게 됩니다. 그러면, 가독성이 어떨까요? 당연히 떨어지니 우리는 저 화면을 (2)와 이 화면 정 중앙에 위치시켜야 됩니다. 그러면 코딩 시 아래와 같은 순서로 진행하셔야 됩니다.

 

  A. 우리가 만든 GUI 크기를 컴퓨터에 알리고 컴퓨터는 GUI 크기와 동일한 가상의 녹색 박스를 만듭니다.

  B. 컴퓨터 모니터의 크기와 가운데 위치를 컴퓨터에 알립니다.

  C. 컴퓨터는 가상의 녹색 박스를 모니터 정 중앙으로 파란색 박스와 같이 위치를 이동시킵니다.

  D. 파란색 박스에 우리가 만든 GUI를 이동시킵니다.

 - 이해가 되셨나요? 컴퓨터에 우리 GUI 크기를 알려주고 컴퓨터는 GUI 크기와 동일한 가상 박스를 만든 후 모니터 정 중앙으로 보냅니다. 그 후 그 가상 박스 안에 우리가 만든 진짜 GUI를 이동시켜 중앙 정렬시키는 것입니다. 자 그럼 코딩해보도록 하겠습니다.

 

2. GUI 전시 코딩하기

 (1) GUI 생성하기

GUI 생성하기
GUI 생성하기

  - class myFirstWindow(QtWidgets.QWidget) : myFirstWindow라는 클래스를 만들었으며, GUI 생성을 위해 QtWidgets.QWidget을 상속받습니다. 상속받는 순간 우리는 부모 클래스 덕분에 GUI를 생성할 수 있습니다.

  - def __init__(self) : 모든 객체(a, b c, d 뭐 이런 거입니다.) 생성 시 초기화가 필요한데 __init__을 사용하여 초기화합니다. 이때, 사전적 의미는 "생성자"라고 하는데 초기화 한다라 고만 생각하시면 됩니다.

  - super(myFirstWindow, self).__init__() : 부모 클래스의 기능을 받아와 초기화해주는 것입니다.

  - self.k = Kiwoom() : 이 부분은 기초반을 수강하셔야 알 수 있는 부분인데 Kiwoom()이라는 클래스 안에 코스피/코스닥 ADR 정보를 저장했기 때문에 self.k에 인스턴스화 하여 언제든 ADR 값을 불러올 수 있게 하였습니다. 여러 분들은 어디에 입력하였는지 저는 잘 모르지만 입력된 값을 불러오시기만 하면 됩니다.

  - self.resize(500, 50) :  500, 50 사이즈의 GUI를 만들었습니다.

  - self.setWindowTitle("투자 가이드라인") : GUI 이름을 setWindowTitle함수를 이용해 투자 가이드라인이라고 만들었습니다.

 

 (2) GUI에 ADR 값 입력하기

  아래 보시면 약간 복잡한데 설명드리겠습니다.

GUI에 ADR 값 입력하기
GUI에 ADR 값 입력하기

 - if self.k.kospi > 120: self.k에 저장된 코스피 ADR 값이 120 이상이면 아래 코드가 수행되게 하였습니다.

 - self.label1 = basicLabel(self, "매수하지 마세요. 제발(% s, %s) % (self.k.kospi, self.k.kosdac)) : self.label1에 "매수하지 마세요. 제발(% s, %s)를 입력합니다. 이때, 입력 값은 코스피/코스닥 ADR 값입니다. 그리고 입력 시 basicLabel이라는 클래스를 사용하였습니다.

basicLabel
basicLabel

 - basicLabel 클래스는 우리가 입력한 "매수하지 마세요. 제발(%s, %s) GUI 어디에 입력할지를 정하는 코딩입니다. 보시면 초기화 부분은 넘어가고 setText 함수를 이용해 "매수하지 마세요. 제발(%s, % s)을 GUI에 입력합니다. 그리고 move 함수를 이용해 GUI 내 위치를 정합니다. 혹시 어려우시면 더욱 자세히 설명드리겠으나 그다지 중요한 부분이 아니라 코드 그대로 쳐 넣으시고 한번 move값 변경하며 움직여 보세요. 실습이 최고입니다.

 - self.label1.setSyleSheet("color : red") : 글자색을 setSyleSheet로 선정합니다.

 - self.label1.setFont(QtGui.QFont("맑은고딕", 14, QtGui.Qfont.Bold)) : 글자 폰트와 진하기를 설정합니다. setFont와 QtGui.QFont 그리고 QtGui.Qfont.Bold는 함수이므로 그냥 외우 셔야 되는 부분입니다. 프로그램 만든 사람이 이렇게 쓸 거라고 하니 우리는 써야 겟죠;;

 자 GUI도 만들었고 글도 적어 넣었습니다.

 (3) GUI 스크린 정 가운데 위치시키기

 앞서 설명드린 거와 똑같이 진해합니다.

GUI 스크린 정 가운데 위치 시키기
GUI 스크린 정 가운데 위치 시키기

 

  A. 우리가 만든 GUI 크기를 컴퓨터에 알리고 컴퓨터는 GUI 크기와 동일한 가상의 녹색 박스를 만듭니다.

  - qr = self.frameGeometry() : frameGeometry함수를 이용해 GUI 크기와 동일한 가상 박스를 만듭니다. 그 값은 qr에 입력합니다.

  B. 컴퓨터 모니터의 크기와 가운데 위치를 컴퓨터에 알립니다.

  - cp = QDesttop.... : 이 함수를 통해 컴퓨터 모니터 크기 및 중앙값을 파악합니다. 그리고 값은 cp에 입력합니다.

  C. 컴퓨터는 가상의 녹색 박스를 모니터 정 중앙으로 파란색 박스와 같이 위치를 이동시킵니다.

  - qr.moveCenter(cp) qr이라는 가상 박스를 cp(모니터 중앙) 위치로 이동시킵니다.

  D. 파란색 박스에 우리가 만든 GUI를 이동시킵니다.

  - self.move(qr.topLeft()) : 좌측 상단에 위치하고 있던 우리의 GUI를 화면 정 중앙으로 끌고 옵니다.

 (4) 현재 화면에서 우리가 생성한 GUI 클래스 실행시키기

   if... main에서 우리가 생성한 클래스 myFirstWindow()를 실행시켜줘야 가동됩니다. 클래스로 만들지 않았다면 굳이 할 필요 없습니다.

반응형

myFirstWindow()를 실행
myFirstWindow()를 실행

 

3. 코딩 공유

 오늘은 특별히 중급 반일 지라도 코드를 공유해 드리겠습니다.

 아래 코드 잘 확인하세요

 - class myFirstWindow : GUI 실행 클래스죠?

 - self.center() : 우리가 만든 GUI 중앙으로 정렬시킵니다.

 - self.show() : 우리가 만든 GUI 보여줍니다.

 - def center(self) : gui 정 중으로 보내는 함수입니다.

 - class basicLabel() : gui에 우리가 원하는 텍스트 입력하는 클래스입니다.

 

이해가 어려우시면 언제든 질문 주세요!

class myFirstWindow(QtWidgets.QWidget):
    def __init__(self):
        super(myFirstWindow, self).__init__()

        self.k = Kiwoom()

        self.resize(500, 50)    # 창 크기
        self.setWindowTitle('투자 가이드 라인')

        if self.k.kospi > 120:
            self.label1 = basicLabel(self, "매수하지 마세요. 제발(%s, %s)" % (self.k.kospi, self.k.kosdac))
            self.label1.setStyleSheet("Color : red")
            self.label1.setFont(QtGui.QFont("맑은고딕", 14, QtGui.QFont.Bold))

        elif self.k.kospi < 120 and self.k.kospi > 100:
            self.label1 = basicLabel(self, "매수는 신중하세요. 비중 30퍼센트(%s, %s)" % (self.k.kospi, self.k.kosdac))
            self.label1.setStyleSheet("Color : purple")
            self.label1.setFont(QtGui.QFont("맑은고딕", 14, QtGui.QFont.Bold))

        elif self.k.kospi > 80 and self.k.kospi < 100:
            self.label1 = basicLabel(self, "투자하기 좋은날. 비중 100퍼센트(%s, %s)" % (self.k.kospi, self.k.kosdac))
            self.label1.setStyleSheet("Color : blue")
            self.label1.setFont(QtGui.QFont("맑은고딕", 14, QtGui.QFont.Bold))

        elif self.k.kospi < 80:
            self.label1 = basicLabel(self, "공격적 투자 가능. 비중 200퍼센트(%s, %s)" % (self.k.kospi, self.k.kosdac))
            self.label1.setStyleSheet("Color : green")
            self.label1.setFont(QtGui.QFont("맑은고딕", 14, QtGui.QFont.Bold))

        self.center()           # Center() 함수를 통해 창이 화면의 가운데 위치
        self.show()

    def center(self):
        qr = self.frameGeometry()                          # 현재 메인 화면의 크기와 위치 정보를 qr에 저장, 창의 위치와 크기 정보를 가져옴
                                                           # 가상 프레임
        cp = QDesktopWidget().availableGeometry().center() # 사용하는 모니터 화면의 크기와 가운데 위치 파악
        qr.moveCenter(cp)                                  # 창의 직사각형 위치를 화면의 중심의 위치로 이동
        self.move(qr.topLeft())                  # 현재 창을 화면의 중심으로 이동했던 직사각형 (qr)의 위치로 이동
                                                 # 결과적으로 현재 창의 중심이 화면의 중심과 일치하게 되어 창의 가운데 정렬 됩니다.

class basicLabel(QtWidgets.QLabel):
    def __init__(self, frame, text):
        QtWidgets.QLabel.__init__(self, frame)
        self.setText(text)
        self.move(20, 20)
반응형

.link_tit