発生している問題
weatherget関数を呼び出したときに、変数dateが0で固定され、必ず「今日の天気」を選んだときの表示になってしまう。
↓「今日の天気」以外の項目を選んでも、必ず今日の天気を検索してきてしまう↓
該当のソースコード
1つ目:
test.py
Python3
1 2import tkinter as tk 3import tkinter.messagebox as message 4import os 5import get_weather #ここで後述のget_weather.pyをインポートしています。 6 7def exit(): 8 authwindow=tk.Tk() 9 authwindow.title('認証') 10 authwindow.geometry('175x100') 11 entry=tk.Entry(authwindow) 12 label=tk.Label(authwindow, text='パスコードを入力').pack() 13 entry.pack() 14 15 def authentication(): 16 password=entry.get() 17 if(password=="test"): 18 authwindow.destroy() 19 window.destroy() 20 else: 21 response=message.showerror('認証', 'パスコードが違います') 22 23 def exit(): 24 authwindow.destroy() 25 okbutton=tk.Button(authwindow,text='OK', command=authentication).pack(side=tk.LEFT) 26 cancelbutton=tk.Button(authwindow,text='キャンセル', command=exit).pack(side=tk.RIGHT) 27 28def reboot(): 29 response=message.askyesno('確認', '再起動しますか?') 30 if(response==True): 31 os.system('sudo reboot') 32 else: 33 response=message.showinfo('', '再起動しません。') 34 35def shutdown(): 36 response=message.askyesno('確認', 'シャットダウンしますか?') 37 if(response==True): 38 os.system('sudo poweroff') 39 else: 40 response=message.showinfo('', 'シャットダウンしません。') 41 42def weatherget(): 43 weatherwindow=tk.Tk() 44 weatherwindow.title('天気を調べる') 45 weatherwindow.geometry('150x150') 46 radio_value=tk.IntVar() 47 radio_value.set(0) 48 character={0:'今日の天気',1:'明日の天気',2:'明後日の天気'} 49 tk.Radiobutton(weatherwindow, text=character[0], variable = radio_value, value = 0).pack() 50 tk.Radiobutton(weatherwindow, text=character[1], variable = radio_value, value = 1).pack() 51 tk.Radiobutton(weatherwindow, text=character[2], variable = radio_value, value = 2).pack() 52 def get(): 53 date = radio_value.get() 54 print(date) 55 get_weather.weather(date) 56 weatherwindow.destroy() 57 tk.Button(weatherwindow, text='調べる', command=get).pack() 58 weatherwindow.mainloop() 59 60window=tk.Tk() 61menubar=tk.Menu(window) 62sysmenu=tk.Menu(menubar) 63window.attributes("-fullscreen", True) 64button=tk.Button(window,text="天気を調べる", command=weatherget).pack() 65menubar.add_cascade(label='メニュー', menu=sysmenu) 66sysmenu.add_command(label='再起動', command=reboot) 67sysmenu.add_command(label='シャットダウン', command=shutdown) 68sysmenu.add_command(label='開発環境へ', command=exit) 69window.config(menu=menubar) 70 71
2つ目:
get_weather.py
Python3
1import tkinter as tk 2import tkinter.messagebox as msg 3import requests 4import os 5def weather(date): 6 api_url = 'http://weather.livedoor.com/forecast/webservice/json/v1'; 7 payload={'city':'130010'} 8 weather_data = requests.get(api_url, params=payload).json() 9 speech_data=(weather_data['forecasts'][date]['dateLabel'] + 'の天気は、' + weather_data['forecasts'][date]['telop'] ) 10 response=msg.showinfo('天気を調べる', speech_data) 11 12
試したこと
・weatherget関数単独で実行してみた(→何故か動いた。しかし、Tkinterから呼び出すことが私の目標なので、別の解決方法を現在探しています。
補足情報
天気予報を取得するには、LINE株式会社が提供する「Weather Hacks」の「お天気Webサービス」を利用しています。
また、OSは、Linux Debianのバージョン 10(buster)を使用しています。
回答1件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2019/08/28 11:34
2019/08/28 23:47
2019/08/29 06:09