APIを使った天気速報に今日の夕飯をすすめるコードを足そうとした(失敗編)

プログラム駆け出しの鈴木は、前回OpenWeatherMAPによるAPIを用いて、その時々の気温を示すコードを書きました。Pycharm CEを使っています。

要領的には前回の方法で天気の全ての情報を示せるので、天気だけにこだわってもあれだなと思い、

今日の夕飯を先に決めてくれるようなコードもくっつけようと思いました。

今あるのが

四角い簡単なGUIに、
ラベル(あらかじめ記載された文章)、
書き込めるスペース、
OKボタンです。

OKボタンを押すと今日の夕飯がランダムで出現するようなコードを書こうと思いました。

やることとしてはimport randomを置いておいて、夕飯のリストを作っておき、random.choiceでリストから任意に一つ選ぶ、という方法です。
また、ラベルの部分は1個だと足りないので、もう一つ足そうと思います。

今のところPython上では出せるのですが、それを画面に表示させるところでつまづいています涙

慣れている方にとっては造作もないことだと思いますが、初心者がやってしまうことの備忘録として残します。

実際に書いたコードはこちらです。

import requests
import json
import random
from tkinter import *
from tkinter import ttk

city = "Tokyo"

API_KEY = "自分のAPIキー"

url = 'http://api.openweathermap.org/data/2.5/weather?q=Tokyo&APPID=自分のAPIキー'

response = requests.get(url)

data = response.json()

jsontext = json.dumps(data,indent=4)

#print(jsontext)


data = response.json()

temp = data["main"]["temp"]
humi = data["main"]["humidity"]

ctemp = temp - 273.15


root = Tk()
root.title('天気速報')


# ウィジェットの作成
frame1 = ttk.Frame(root, padding=16)
label1 = ttk.Label(frame1, text='今日の気温は' + str(int(ctemp)) + '°Cです')
t = StringVar()
entry1 = ttk.Entry(frame1, textvariable=t)
dinner = ["ラーメン", "魚定食", "生姜焼き", "卵かけご飯", "寿司"]
button1 = ttk.Button(
   frame1,
   text='OK',
   command=lambda: print(random.choice(dinner) + 'Hello, %s.' % t.get()))
gohan_text = random.choice(dinner)

label2 = ttk.Label(frame1,text = gohan_text)

# レイアウト
frame1.pack()
label1.pack(side=LEFT)
entry1.pack(side=LEFT)
button1.pack(side=LEFT)
label2.pack(side=RIGHT)
# ウィンドウの表示開始
root.mainloop()

import random を入れればrandom.choiceが使えるようになるので追加、
リストは任意で作成してlabel2を作成しました。

実際の結果はこちらです

スクリーンショット 2021-04-08 14.44.07

スクリーンショット 2021-04-08 14.43.46

明らかに思ったのと違います涙

Label2にまぁたしかにランダムで表示されるはされるのですが、OKボタンを押したら表示されるような仕組みにしたかったです。
gohan_textで代入しておけばいけるのかと思ってましたが、全然いかなかったです。

今見直すと、random.choiceがOKボタンを押す度に再度反応するようにしないとなるわけがないですね、、

もしくは2枚目に表示されているものを最新のものだけ抜き取って反映されるような仕組みにすればいけるかもしれません。

明日またやり直しです。きょうは卵かけご飯にします。

この記事が気に入ったらサポートをしてみませんか?