大量のデータの場合や頻繁に変更になるようなデータは外部ファイルとしておき、必要に応じて読み込めばよいのですが、
exe化するときに面倒でエラーがよく起きます(自分の場合)。
そこで変化しないデータの場合は、プログラム中に書き込んだほうが便利なので、その方法で和歌Q&Aを作りました。
1 | import tkinter as tk | |
2 | import random | |
3 | ||
4 | root = tk.Tk() | |
5 | ||
6 | root.geometry(‘500×250’) | |
7 | root.title(‘有名和歌’) | |
8 | ||
9 | ||
10 | # Label | |
11 | lbl1 = tk.Label(text=’和歌:’) | |
12 | lbl1.place(x=10, y=30) | |
13 | lbl2 = tk.Label(text=’歌人:’) | |
14 | lbl2.place(x=10, y=80) | |
15 | ||
16 | ||
17 | # Text(Entry) | |
18 | txt1 = tk.Entry(width=60) | |
19 | txt1.place(x=60, y=30) | |
20 | txt2 = tk.Entry(width=30) | |
21 | txt2.place(x=60, y=80) | |
22 | ||
23 | ||
24 | 歌集 = { | |
25 | “秋来ぬと 目にはさやかに見えねども 風の音にぞおどろかれぬる”:”藤原敏行”, | |
26 | “秋の野に 咲きたる花を指(および)折り かき数ふれば七種(ななくさ)の花”:”山上憶良”, | |
27 | “天つ風 雲の通ひ路吹き閉ぢよ をとめの姿しばしとどめむ”:”僧正遍照”, | |
28 | “天の原 ふりさけみれば春日なる 三笠の山に出(いで)し月かも”:”安倍仲麿”, | |
29 | “あをによし 奈良の都は咲く花の にほふがごとく今さかりなり”:”小野老(おのの おゆ)”, | |
30 | “いにしへの 奈良の都の八重桜 けふ九重ににほひぬるかな”:”伊勢大輔”, | |
31 | “大海の いそもとどろに寄する波 われてくだけて さけて散るかも”:”源実朝”, | |
32 | “奥山に 紅葉踏みわけ鳴く鹿の 声きく時ぞ秋は悲しき”:”猿丸大夫”, | |
33 | “かささぎの 渡せる橋におく霜の 白きを見れば夜ぞ更けにける”:”大伴家持”, | |
34 | “君がため 惜しからざりし命さへ 長くもがなと思ひけるかな”:”藤原義孝”, | |
35 | “こちふかば 匂ひおこせよ梅の花 あるじなしとて春な忘れそ”:”菅原道真”, | |
36 | “銀(しろかね)も 金(くがね)も玉も何せむに まされる宝子にしかめやも”:”山上憶良”, | |
37 | “田子の浦に うち出でて見れば白妙の 富士の高嶺に雪は降りつつ”:”山部赤人”, | |
38 | “月みれば 千々(ちぢ)に物こそ悲しけれ 我が身ひとつの秋にはあらねど”:”大江千里(おおえのちさと) “, | |
39 | “花の色は 移りにけりないたづらに わが身世にふるながめせしまに”:”小野小町”, | |
40 | “春過ぎて 夏来にけらし白妙の 衣干すてふ天の香具山”:”持統天皇”, | |
41 | “東(ひんがし)の 野にかぎろいの立つ見えて かえりみすれば 月かたぶきぬ”:”柿本人麻呂”, | |
42 | “見わたせば 花ももみじもなかりけり 浦のとまやの秋の夕ぐれ”:”藤原定家”, | |
43 | “世の中に たえて桜のなかりせば 春の心はのどけからまし”:”在原業平”, | |
44 | “我が園に 梅の花散る久かたの 天より雪の流れ来るかも”:”大伴旅人”, | |
45 | } | |
46 | ||
47 | def btn1_click(): | |
48 | txt1.delete(0, tk.END) | |
49 | txt2.delete(0, tk.END) | |
50 | 要素 = random.choice(list(歌集.keys())) #ここの要素はkeyである和歌となる | |
51 | txt1.insert(tk.END, 要素) | |
52 | ||
53 | def show_歌人(): #上のdef btn1_clickの後にこの関数が動作する | |
54 | txt2.delete(0, tk.END) | |
55 | txt2.insert(tk.END, 歌集[要素]) #ここの要素は歌人となる | |
56 | ||
57 | #Command Button2 #btn1がクリックされてからbtn2が表示・処理が始まる | |
58 | btn2 = tk.Button(root, text=’歌人の表示’, command=show_歌人) | |
59 | btn2.place(x=225, y=150) | |
60 | ||
61 | #Command Button1 | |
62 | btn1 = tk.Button(root, text=’開始/次へ’, command=btn1_click) | |
63 | btn1.place(x=100, y=150) | |
64 | ||
65 | ||
66 | def destroy(): #プログラム終了の決まりcode | |
67 | root.destroy() | |
68 | ||
69 | #Command Button3 | |
70 | btn3 = tk.Button(root, text=’終わり’, command=destroy) | |
71 | btn3.place(x=350, y=150) | |
72 | ||
73 | root.mainloop() |
runさせると下図のようになります。 前のプログラムのマウスoffで歌人を表示させるのは、押さえているのが面倒なので別ボタンとしました。