■tkinter 1問1答
Tkinter の画面にて「問題」ボタンを押下して問題をセットし
「回答」ボタン押下にて答えをメッセージボックスで出力する。
今回は英単語の1問1答アプリを作成する。
問題および答えはCSVファイルに管理し、
pandasのライブラリを使って呼び出す。
▼CSVファイル名
EnglishWords.csv
▼CSVファイルの内容
「英語」,「日本語」
about five hundred yen,およそ500円
get to the airport,空港に着く
be angry with sb,(人)に怒っている
play baseball,野球をする
bring money,お金を持ってくる
・
・
・
a close friend,親友
make friends with sb,(人)と友達になる
give sth to sb / give sb sth,(人)に(物)を与える、あげる
・サンプルコード
# -*- Coding: UTF-8 -*-
import pandas as pd
import tkinter as tk
import tkinter.messagebox as msg
import random
# 問題選択処理
def SelectEnglishWords():
# CSVファイル読み込み
df = pd.read_csv("EnglishWords.csv")
# CSVファイルの長さを取得
df_length = len(df)
# csvファイルの長さ内で任意の数字を取得(CSVの先頭はタイトル扱いのため-1する)
select_nums = random.randint(0, df_length - 1)
# 変数にCSVファイル内の設定された英語と日本語を格納
select_word = [df.iloc[select_nums][0], df.iloc[select_nums][1]]
# 0か1の乱数を格納
nums = random.randint(0, 1)
# 問題ラベルを格納
label_question["text"] = select_word[nums]
# 変数:numsの逆の値を答えにセット
if nums == 0 :
ans_text.set(select_word[1])
elif nums == 1:
ans_text.set(select_word[0])
# 答え表示処理
def MsgBoxAns():
msg.showinfo("答え", ans_text.get())
##############
# 画面の設定
##############
base = tk.Tk()
# 画面のタイトルを設定
base.title("英単語1問1答")
# 画面のサイズを設定する
# width :幅(px)
# height :高さ(px)
canvas = tk.Canvas(base, width=500, height=250)
canvas.pack()
# 回答用の変数と初期値をセット
ans_text = tk.StringVar()
ans_text.set("問題ボタンを押して回答をセットしてください")
# 問題表示用のラベル
label_question = tk.Label(anchor='center')
label_question.place(x=225, y=50)
# 問題作成ボタンの作成と配置場所
btn_select = tk.Button(base, text="問題", command=SelectEnglishWords)
btn_select.place(x=150, y=155)
# 答えボタンの作成と配置場所
btn_ans = tk.Button(base, text="答え", command=MsgBoxAns)
btn_ans.place(x=300, y=155)
# 画面の表示
base.mainloop()
・実行結果
▼起動直後の画面
▼「問題」ボタン押下時
▼「答え」ボタン押下時