証券コードを入力すると会社名が出る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()