前回は、辞書に三つの要素を入れる術が分からなかったので、策を弄して取敢えずは動くように出来ました。
でも何となく乱数で飛び飛びに選択するというのが、気持ち悪いので今回は次のようにしました。
1.データをテキストファイルとして準備する(文字列読込1.txt)
2.それをread_word()関数で変数に読み込む
3.Nextボタンで乱数で単語・意味・備考を表示させる
という形でプログラムしました。
# 難解英単語クイズ(data3要素は別file)2.py import tkinter as tk import random import textwrap # 文字列折り返し用 root = tk.Tk() root.geometry(‘350×300’) root.title(‘難解英単語’) lbl1 = tk.Label(text=’英単語:’) lbl1.place(x=10, y=30) lbl2 = tk.Label(text=’意味:’) lbl2.place(x=10, y=80) lbl3 = tk.Label(text=’備考:’) lbl3.place(x=10, y=130) lbl4 = tk.Label(root) # 備考表示用 lbl4.place(x=60, y=130) txt1 = tk.Entry(width=27, font=(“Helevetica”, 12, “bold”), fg=”red”) # 英単語 txt1.place(x=60, y=30) txt2 = tk.Entry(width=40) # 意味 txt2.place(x=60, y=80) btn1 = tk.Button(root, text=’開始/次へ’) btn1.place(x=60, y=230) def read_words(): with open(‘文字列読込1.txt’, ‘r’, encoding=’utf_8′) as file: line = file.readlines() eitango_words = [] # 英単語list imi_words = [] # 意味list ref_words = [] line_count = 0 # 単語数カウンター for name in line: name = name.rsplit(“\t”) # tabで区切ったファイルの場合 if len(name) == 3: # 要素3個をそれぞれのlistへ追加する eitango_words.append(name[0]) # 英単語をlistへadd imi_words.append(name[1]) # 意味をlistへadd ref_words.append(name[2]) line_count += 1 # print(line_count) # txtがなくなるまで繰り返す return line_count, [eitango_words, imi_words, ref_words] def show_data(count, num, eitango_words, imi_words, ref_words): # 乱数に応じた要素を表示する関数 eitango_word = eitango_words[num] # 英単語をeitango_wordに格納 imi_word = imi_words[num] ref_word = ref_words[num] # ボタン1(開始/次)の関数 def show_tang(event): txt1.delete(0, tk.END) txt2.delete(0, tk.END) # textの消し方がラベルとテキストボックスでは異なる lbl4[“text”] = “” num = random.randrange(0, count) # print(f’num={num}’) #変数numの表示 eitango_word = eitango_words[num] # eitango_wordに格納 txt1.insert(0, f’ {eitango_word}’) def meaning(event): txt2.delete(0, tk.END) imi_word = imi_words[num] ref_word = ref_words[num] # txt1.insert(tk.END, eitango_word)でもOK txt2.insert(0, f’ {imi_word}’) lbl4[“text”] = “” lbl4[“text”] = ref_word message = textwrap.wrap(ref_word, 35) ref = ‘\n’.join(message) lbl4[“text”] = ref btn2.bind(“<Button>”, meaning) btn1.bind(“<Button>”, show_tang) count, words = read_words() print(“line 86: “, count) eitango_words = words[0] imi_words = words[1] ref_words = words[2] num = random.randrange(0, count) show_data(count, num, eitango_words, imi_words, ref_words) def destroy(): root.destroy() btn2 = tk.Button(root, text=”意味・備考”) btn2.place(x=150, y=230) btn3 = tk.Button(root, text=’終わる’, command=destroy) btn3.place(x=250, y=230) root.mainloop() |
勿論結果も前回と同じようになります。
終わり