大分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() |