データをプログラムに書き込んでおく

大量のデータの場合や頻繁に変更になるようなデータは外部ファイルとしておき、必要に応じて読み込めばよいのですが、
exe化するときに面倒でエラーがよく起きます(自分の場合)。

そこで変化しないデータの場合は、プログラム中に書き込んだほうが便利なので、その方法で和歌Q&Aを作りました。

 

  1 import tkinter as tk
  2 import random
  3  
  4 root = tk.Tk()
  5  
  6 root.geometry('500x250')
  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で歌人を表示させるのは、押さえているのが面倒なので別ボタンとしました。

 

 

 

 

 

 

 

 

Python小学館
クラスへの移行練習-① ②

先人のプログラムを利用させて頂くには、やはりクラス(特に継承機能)を理解する必要が有ります。 そこで …

Python別館
Python別館 目次

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

Python小学館
csvファイルの呼び込み その二

textファイルでもcsvファイルでも読めるように、読込機能だけのcodeをアップしておきます。 # …