0
3

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 1 year has passed since last update.

Python 証券コードを入力すると会社名が出るUI

Posted at

証券コードを入力すると会社名が出るUI

tkinterを使い、証券コードを入力するとその会社名が出るプログラムの作成

入力されたコードが正しいと会社名、それ以外だと「input code」を表示するUIを作ります

まずは必要モジュールをインポート

# モジュールのインポート
import tkinter as tk

import pandas as pd
import csv

証券コードと、会社名を取得
Pythonで証券コードから会社名の取得(Edinetコードリストを利用)

with open('EdinetcodeDlInfo.csv') as f:
    reader= csv.reader(f)
    next(reader)
    col = next(reader)
    data = [row for row in reader]
df = pd.DataFrame(data, columns=col)

tkinterでまずはwindowを作成

root = tk.Tk()

証券コードを入れるEntryと会社名を入れるLabelを作成。
Entryにはに入力があった時に検証するvalidate='key'を設定。その時に動作するvcmdを設定。
vcmdには動作させたい関数(cord_chkという関数を今回は作成します)と、動作させたい関数に渡す引数を設定(今回は入力値を取得するための引き数%Pを設定)します。

entry = tk.Entry(root, width=10, bg='white',
                 validate='key',
                 vcmd=(cord_chk, '%P'),)
entry.grid(column=0, row=0)

label = tk.Label(root, text='input code', bg='gray')
label.grid(column=0, row=1)

vcmdで動作させる関数を、registerメソッドに定します。

cord_chk = root.register(func_cord_chk) 

動作させる関数は以下です。入力が数字でかつ4桁の時に動作させます。
コードが間違えた(リストにない)場合はinput codeを表します

def func_cord_chk(code):
    #4桁の数字の場合はTrue、そうでない場合はFalseに今後変更すること
    if (len(code) == 4) and (after.encode('utf-8').isdigit()):
        code_0 = after + '0'
        company = df[df['証券コード'] == code_0]['提出者名']
        if len(company) == 1:
            label.config(text=company.values[0])
        else:
            label.config(text='input code')
    else:
        label.config(text='input code')
    return True

すべてを動作させるコードは以下です。

#モジュールインポート
import tkinter as tk
import pandas as pd
import csv

#銘柄コードと、会社名を取得
with open('EdinetcodeDlInfo.csv') as f:
    reader= csv.reader(f)
    next(reader)
    col = next(reader)
    data = [row for row in reader]
df = pd.DataFrame(data, columns=col)

# 入力が数字でかつ4桁の時に動作させる関数
def func_cord_chk(after):
    #4桁の数字の場合はTrue、そうでない場合はFalse
    if (len(after) == 4) and (after.encode('utf-8').isdigit()):
        code = after + '0'
        company = df[df['証券コード'] == code]['提出者名']
        # 会社名があった場合は会社名をLabelのテキストに入力
        if len(company) == 1:
            label.config(text=company.values[0])
        else:
            label.config(text='input code')
    else:
        label.config(text='input code')
    return True

# windowの作成
root = tk.Tk()

# registerの設定
cord_chk = root.register(func_cord_chk) 

# 入力(Entry)、結果(Label)の出力の作成
entry = tk.Entry(root, width=10, bg='white',
                 validate='key',
                 vcmd=(cord_chk, '%P'),)
entry.grid(column=0, row=0)

label = tk.Label(root, text='input code', bg='gray')
label.grid(column=0, row=1)

# 出力
root.mainloop()

image.png

トヨタ自動車の銘柄コード7203を入力すると以下のようになります。
image.png

0
3
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
3

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?