【python学習記録02】 tkinterを使った暗算ゲーム

 GUIライブラリであるtkinker(これを打つとき常に小室哲哉が頭に浮かぶ)を学んだので甥っ子用に暗算チェレンジのプログラムを組みました。

実行すると
・メッセージボックスが出現しOKを押すと開始
・問題はランダムな4桁の数字の足し算
・入力ボックスに答えを入れエンターを押すと正解 / 不正解がメッセージボックスで表示される
・「問題を変える」ボタンを押すとランダムな数字に入れ替わる

簡単なところにまだまだ頓くので調べ調べでやっとです。
参考にさせてもらったサイトは最初の記事に随時追加しております
変数名とか分かりづらいですがご容赦を。

import tkinter as tk
import random as rdm
import tkinter.messagebox as msb

root = tk.Tk()

root.title(u'暗算チャレンジ')
root.geometry('500x400')

#問題を可変テキストで定義
q1 = tk.StringVar()
q1.set('0000')
q2 = tk.StringVar()
q2.set('0000')

#ランダムな整数を作る
def create_rdm():
   global a
   global b
   a = rdm.randint(1000,9999)
   b = rdm.randint(1000,9999)

#初期化 問題ラベルにランダムな整数を挿入 解答欄クリア
def init():
   create_rdm()
   q1.set(a)
   q2.set(b)
   anwEntry.delete(0,tk.END)

#正誤判定
def anw(event):
   try:
       if int(anwEntry.get()) == (a+b):
           good_lb = msb.showinfo('正解','正解! good!')
       else:
           good_lb = msb.showinfo('不正解','もう一回考えましょ')
   except:
       return

#タイトルラベル
title1 = tk.Label(text=u'暗算チャレンジ',font=18)
title1.place(x=20, y=20)

#問題文
qString1 = tk.Label(root, textvariable=q1)
qString2 = tk.Label(root, textvariable=q2)
plusLabel = tk.Label(text=u'+',font=18)
eqLabel = tk.Label(text=u'=',font=18)
anwEntry = tk.Entry(width=6)
anwEntry.focus_set()
anwEntry.bind('<Return>',anw)

#問題文の配置
qString1.place(x=20, y=40)
plusLabel.place(x=70,y=40)
qString2.place(x=100, y=40)
eqLabel.place(x=150, y=40)
anwEntry.place(x=180, y=40)

#問題を変えるボタン
srtButton = tk.Button(text=u'問題を変える', width=20, command=init)
srtButton.place(x=20, y=70)

#オープニングダイアログ
lb1 = msb.showinfo('スタート','暗算チェレンジ スタート!!')
init()

root.mainloop()

簡単な覚え書き
・ランダムな整数を生成するにはrandomをインポートし
 randint(最小値,最大値)
 で定義する

・可変のstringラベルは
 x= tk.StringVar()
 Label_a = tk.Label(root, textvariable=x)
 x.set(arg)
で定義からセットが完了する

・特定キーを押した時に動作させるには
 Entry_a.bind('キー名',関数)
呼び出される側の関数には引数にevent型が渡されるっぽい(この辺がよくわからなくて困った)

・Entryを取得(.get())した際はstring型で返される

これからの改造展望
・正解までの時間取得してタイムを出す
・5問連続制にする(不正解の場合は前の問題に戻るようにしろとリクエストがあった)
・ランダムで引き算も出題する
・可能なら桁数を選択できるようにする

この記事が気に入ったらサポートをしてみませんか?