파이썬으로 연속 조회가 가능한 주식 차트 만들기(tkinter, seolpyo-mplchart)

작성자: [관리자] 하얀설표

2025.05.07 13:33 (KST) 작성됨

2025.05.08 11:04 (KST) 수정됨






(05.08) 수정됨.

주식 차트를 그리는 패키지는 파이썬뿐만이 아니라 여러 프로그래밍 언어마다 존재한다.

이 코드를 단순하게 사용하면 코드를 실행하기 전에 차트를 그릴 데이터를 어떻게 가져오고 처리할지 하나하나 수정해야 하는 번거로움이 있다.

tkinter나 pyqt같은 gui를 사용하면 이런 번거로운 작업을 생략하고, 종목코드만 입력해 해당하는 데이터를 가져오게 만들 수도 있다.

 

 

텐배거 종목 정보를 추가해서 사용하기

이걸 베이스로 기능을 조금 추가하면 이런 것도 가능해진다.

텐배거 종목들은 따로 정리한 글들이 있다.

 

예제 코드

from datetime import datetime
import tkinter as tk

import seolpyo_mplchart as mc
import pandas as pd
from matplotlib.backends.backend_tkagg import FigureCanvasTkAgg


class TkChart:
    def __init__(self, window: tk.Tk):
        self.window = window
        self.window.option_add('*Font;, '맑은고딕 14')  # 모든 위젯 기본 폰트 크기 설정
        window.protocol('WM_DELETE_WINDOW', lambda *_: (mc.close('all'), window.destroy()))

        self.add_entry()
        self.add_chart()
        return

    def add_entry(self):
        frame = tk.Frame(self.window)
        frame.grid(column=0, row=0, sticky='w', padx=10, pady=10)

        self.add_entry_code(frame)
        self.add_entry_name(frame)

        self.message = tk.Label(frame)
        self.message.grid(row=1, column=0, pady=(10, 0), sticky='w', columnspan=10)
        return

    def add_entry_code(self, frame):
        tk.Label(frame, text='종목코드:').grid(row=0, column=0)

        self.sv_code = tk.StringVar()
        self.sv_code.trace_add('write', lambda *x: self.validate_code(x))

        self.entry = tk.Entry(frame, textvariable=self.sv_code, width=10, justify='center')
        self.entry.grid(row=0, column=1)
        return

    def add_entry_name(self, frame):
        tk.Label(frame, text='종목명:').grid(row=0, column=2, padx=10)

        self.sv_name = tk.StringVar()

        self.entry = tk.Entry(frame, textvariable=self.sv_name, justify='center', state='disabled')
        self.entry.grid(row=0, column=3)
        return

    code = ''
    def validate_code(self, *_):
        value = self.sv_code.get()
        if not value: self.sv_code.set('')
        else:
            try: int(value)
            except: self.sv_code.set(self.code)
            else:
                len_code = len(value)
                if 6 < len_code: self.sv_code.set(self.code)
                else: self.code = value
                if len_code == 6: self.set_chart(self.code)
        return

    def add_chart(self):
        self.now = datetime.now()
        self.chart = mc.SliderChart()

        frame = tk.Frame(self.window)
        frame.grid(column=0, row=1, sticky='ewsn')
        self.window.columnconfigure(0, weight=1)
        self.window.rowconfigure(1, weight=1)

        self.agg = FigureCanvasTkAgg(self.chart.figure, frame)
        widget = self.agg.get_tk_widget()
        widget.grid(column=0, row=0, sticky='ewsn')
        frame.columnconfigure(0, weight=1)
        frame.rowconfigure(0, weight=1)

        self.set_chart()
        return

    def set_chart(self, code='005930'):
        self.message['text'] = '메세지: 차트 데이터 가져오는 중..'
        price_list = {차트 데이터를 가져오는 코드}
        if not price_list:
            self.message['text'] = '메세지: 종목코드를 확인해주세요.'
        else:
            name = price_list[-1]['name']
            self.sv_code.set(code)
            self.sv_name.set(name)

            self.chart.watermark = f'{name}({code})'
            self.chart.set_data(pd.DataFrame(price_list))
            self.agg.draw()

            self.message['text'] = '메세지: 차트 변경 완료.'
        return


def run():
    root = tk.Tk()
    _ = TkChart(root)
    root.mainloop()
    return


if __name__ == '__main__':
    run()

 

 






추천 (0)


글 목록

댓글을 달 수 없는 게시물입니다.


"분류없음" 카테고리의 #Python 관련 게시물

분류없음
예제)특정 조합이 리스트 요소에 반드시 포함되어야 한다는 사실만 알 때의 조건식
수정 08.20 | [관리자] 하얀설표
👍 0
#Python, #예제
🗨️ 0
썸네일
분류없음
주식시장 개장일과 휴장일 정보를 간단하게 가져오는 방법(엑셀, 파이썬)
수정 07.20 | [관리자] 하얀설표
👍 0
#Python, #주식
🗨️ 0
분류없음
해결) 장고 bulk_update의 메모리 누수 문제(django orm bluk_update method memory leak)
수정 07.12 | [관리자] 하얀설표
👍 0
#Python, #Django
🗨️ 0
분류없음
해결) django.db.utils.OperationalError: database is locked
수정 06.18 | [관리자] 하얀설표
👍 0
#Python, #에러해결, #Django
🗨️ 0
분류없음
악성 크롤러를 괴롭히는 방법
수정 05.18 | [관리자] 하얀설표
👍 0
#Python, #Django
🗨️ 0
분류없음
장고) 모든 방문자에게 세션 부여하기(anonymous user session)
수정 05.15 | [관리자] 하얀설표
👍 0
#Python, #Django
🗨️ 0
썸네일
분류없음
한국거래소의 수정주가 계산 공식을 알아보자
수정 05.10 | [관리자] 하얀설표
👍 0
#Python, #주식
🗨️ 0
썸네일
분류없음
seolpyo-mplchart document
수정 05.08 | [관리자] 하얀설표
👍 0
#Python
🗨️ 0
썸네일
분류없음
seolpyo_mplchart 사용 설명서
수정 05.08 | [관리자] 하얀설표
👍 0
#Python
🗨️ 0
분류없음
tkinter) 단어 자동완성 기능 만들기(autocomplete word suggest)
작성 01.20 | [관리자] 하얀설표
👍 0
#Python
🗨️ 0