幼児向け4択英語クイズ

大分Pythonも慣れてきたので、家庭で使う幼児用教育アプリを作り始めました。

開発環境は、いつものようにW10x64、Python3.7.3です。検証用にはVS Codeを使用しております。

——————————————————

①まづは英語Q&Aアプリです。

どんなアプリかと云いますと、下図のようなアプリが出来ます。

左が質問画面で、Nextボタンを押すと右の画面に変わります。

 

 

② codeは次のようになります。 なおこのeditorはindent、半角空白、その他の特殊文字は
  コピペの場合正しく出ませんのでご注意下さい。

  またprint()が多用されておりますが、検証用ですのでthroughして下さい。

 
# 英語Q&Aクイズ2A.py 8/16/2020

import os  # pathの指定用に使う
import tkinter as tk # as tkとすると、tkinterと書く代わりにtkで済む
import random # 乱数に応じた画像を指定できる
from PIL import Image, ImageTk # jpg、pngいずれも対応している


#################################
# データ用holder
#################################

# codeが分かり易くなるように、以下の二つのholderに分割した。
# holderQ_png
# holderA_png

#################################
# GUIの設定
#################################

root = tk.Tk()
root.geometry(‘460×450’)
root.title(‘英語Q&Aクイズ’)

path = “./holderQ_png”  # このholderにはQ画像のみ置く
questions = os.listdir(path)
# print(os.listdir(path))  # [‘Q1.png’, ‘Q10.png’, ・・・] 全てのQホルダーの画像
question = random.sample(questions, 1)
# print(question[0])  # Q8.png boot時に一回だけ動作する 
img = Image.open(‘./holderQ_png/’ + question[0])
img = ImageTk.PhotoImage(img)

#画像表示用ラベル
label2 = tk.Label(root, image=img)
label2.place(x=20, y=30)

#################################
# コールバック関数
#################################

def select_img_file():
    png_photo_file = random.sample(questions, 1)
    png_photo_file_0 = ‘./holderQ_png/’ + png_photo_file[0]

    global name # global宣言をしないと、他の関数で使用できない
    names = [png_photo_file_0]
    name = random.sample(names, 1)  # ここで選んだものを正解とする
    # print(name)  # [‘./holderQ_png/Q58.png’]

    name = name[0]
    # print(name)  # ./holder1_png/Q58.png
    return name


def push_next_button():  # (Event)にするとboot時に自動更新できない
    # print(select_img_file())
    # 必ず質問の画像になるようにした(holderQ_pngにはQ画像だけが入っている)
    img_next = ImageTk.PhotoImage(Image.open(select_img_file()))
    label2.place(x=20, y=30)
    label2.configure(image=img_next)
    label2.photo = img_next


def show_answer():
    # 質問への解答pngを表示する。質問のpng番号をgetする必要あり
    global name
    # print(name)  # ./holderQ_png/Q59.png
    name = name.replace(‘Q’, ‘A’)
    # print(name)  # ./holderA_png/A59.png # pathもholderA_pngに変わっている ー 素晴らしい!

    img_next = ImageTk.PhotoImage(Image.open(name))
    label2.place(x=20, y=30)
    label2.configure(image=img_next)
    label2.photo = img_next

# 次の画像を表示する
button11 = tk.Button(root, text=’  Next  ‘, bg=’lightblue’,  command=push_next_button)
button11.place(x=100, y=400)

# 解答用画像に切換える。 もしQ60が問題なら、A60に切換える
button12 = tk.Button(root, text=’ Answer ‘, bg=’lightblue’, command=show_answer)
button12.place(x=170, y=400)

# ボタン「終わる」が押されたときの処理
def destroy():
    root.destroy()

button13 = tk.Button(root, text=’   End   ‘, bg=’lightyellow’, command=destroy)
button13.place(x=280, y=400)


#################################
# main
#################################

push_next_button()  # スタート時に一度次へのボタンをonさせている

root.mainloop()
Python別館
Python別館 目次

・Pythonで作成したアプリ関連の記事は「Python別館」に、・widgetやその使用方法・それ …

シニア別館
相模の国 一宮寒川神社

ここ相模の国(ほぼ神奈川県)には、一宮として寒川町に「寒川神社」があります。今年はその神様が元気に彩 …

シニア別館
秋と冬の端境期

過ごしやすい時期です。 犬のお供でついでに撮りました。❶ 主人公  ❷ 廃墟の秋 …