質問編集履歴

3

発生時のスクリーンショットを追加しました。

2019/08/28 13:36

投稿

yoshihoko
yoshihoko

スコア25

test CHANGED
File without changes
test CHANGED
@@ -2,6 +2,10 @@
2
2
 
3
3
  weatherget関数を呼び出したときに、変数dateが0で固定され、必ず「今日の天気」を選んだときの表示になってしまう。
4
4
 
5
+ ↓「今日の天気」以外の項目を選んでも、必ず今日の天気を検索してきてしまう↓
6
+
7
+ ![](e6cec7e74dafbd38c65aeee28dd9c9f6.png)
8
+
5
9
  ### 該当のソースコード
6
10
 
7
11
  1つ目:

2

文法を少し修正しました。

2019/08/28 13:36

投稿

yoshihoko
yoshihoko

スコア25

test CHANGED
File without changes
test CHANGED
@@ -200,4 +200,4 @@
200
200
 
201
201
  天気予報を取得するには、LINE株式会社が提供する「Weather Hacks」の「お天気Webサービス」を利用しています。
202
202
 
203
- OSは、Linux Debianのバージョン 10(buster)を使用しています。
203
+ また、OSは、Linux Debianのバージョン 10(buster)を使用しています。

1

情報を追加しました。

2019/08/28 11:31

投稿

yoshihoko
yoshihoko

スコア25

test CHANGED
@@ -1 +1 @@
1
- どうしてもradio_valueが0以外になりません。
1
+ (python)Tkinterから呼び出した関数正しく機能しません。
test CHANGED
@@ -1,81 +1,203 @@
1
- ### 前提・実現したいこと
2
-
3
-
4
-
5
- ここに質問の内容を詳しく書いてください。
6
-
7
- (例)PHP(CakePHP)で●●なシステムを作っています。
8
-
9
- ■■な機能を実装中に以下のエラーメッセージが発生しました。
10
-
11
-
12
-
13
- ### 発生している問題・エラーメッセージ
1
+ ### 発生している問題 
2
+
3
+ weatherget関数を呼び出したときに、変数dateが0で固定され、必ず「今日の天気」を選んだときの表示になってしまう。
4
+
5
+ ### 該当のソースコード
6
+
7
+ 1つ目:
8
+
9
+ test.py
10
+
11
+ ```Python3
12
+
13
+
14
+
15
+ import tkinter as tk
16
+
17
+ import tkinter.messagebox as message
18
+
19
+ import os
20
+
21
+ import get_weather #ここで後述のget_weather.pyをインポートしています。
22
+
23
+
24
+
25
+ def exit():
26
+
27
+ authwindow=tk.Tk()
28
+
29
+ authwindow.title('認証')
30
+
31
+ authwindow.geometry('175x100')
32
+
33
+ entry=tk.Entry(authwindow)
34
+
35
+ label=tk.Label(authwindow, text='パスコードを入力').pack()
36
+
37
+ entry.pack()
38
+
39
+
40
+
41
+   def authentication():
42
+
43
+ password=entry.get()
44
+
45
+ if(password=="test"):
46
+
47
+ authwindow.destroy()
48
+
49
+ window.destroy()
50
+
51
+ else:
52
+
53
+ response=message.showerror('認証', 'パスコードが違います')
54
+
55
+
56
+
57
+   def exit():
58
+
59
+ authwindow.destroy()
60
+
61
+ okbutton=tk.Button(authwindow,text='OK', command=authentication).pack(side=tk.LEFT)
62
+
63
+ cancelbutton=tk.Button(authwindow,text='キャンセル', command=exit).pack(side=tk.RIGHT)
64
+
65
+
66
+
67
+ def reboot():
68
+
69
+ response=message.askyesno('確認', '再起動しますか?')
70
+
71
+ if(response==True):
72
+
73
+ os.system('sudo reboot')
74
+
75
+ else:
76
+
77
+ response=message.showinfo('', '再起動しません。')
78
+
79
+
80
+
81
+ def shutdown():
82
+
83
+ response=message.askyesno('確認', 'シャットダウンしますか?')
84
+
85
+ if(response==True):
86
+
87
+ os.system('sudo poweroff')
88
+
89
+ else:
90
+
91
+ response=message.showinfo('', 'シャットダウンしません。')
92
+
93
+
94
+
95
+ def weatherget():
96
+
97
+ weatherwindow=tk.Tk()
98
+
99
+ weatherwindow.title('天気を調べる')
100
+
101
+ weatherwindow.geometry('150x150')
102
+
103
+ radio_value=tk.IntVar()
104
+
105
+ radio_value.set(0)
106
+
107
+ character={0:'今日の天気',1:'明日の天気',2:'明後日の天気'}
108
+
109
+ tk.Radiobutton(weatherwindow, text=character[0], variable = radio_value, value = 0).pack()
110
+
111
+ tk.Radiobutton(weatherwindow, text=character[1], variable = radio_value, value = 1).pack()
112
+
113
+ tk.Radiobutton(weatherwindow, text=character[2], variable = radio_value, value = 2).pack()
114
+
115
+ def get():
116
+
117
+ date = radio_value.get()
118
+
119
+ print(date)
120
+
121
+ get_weather.weather(date)
122
+
123
+ weatherwindow.destroy()
124
+
125
+ tk.Button(weatherwindow, text='調べる', command=get).pack()
126
+
127
+ weatherwindow.mainloop()
128
+
129
+
130
+
131
+ window=tk.Tk()
132
+
133
+ menubar=tk.Menu(window)
134
+
135
+ sysmenu=tk.Menu(menubar)
136
+
137
+ window.attributes("-fullscreen", True)
138
+
139
+ button=tk.Button(window,text="天気を調べる", command=weatherget).pack()
140
+
141
+ menubar.add_cascade(label='メニュー', menu=sysmenu)
142
+
143
+ sysmenu.add_command(label='再起動', command=reboot)
144
+
145
+ sysmenu.add_command(label='シャットダウン', command=shutdown)
146
+
147
+ sysmenu.add_command(label='開発環境へ', command=exit)
148
+
149
+ window.config(menu=menubar)
150
+
151
+
14
152
 
15
153
 
16
154
 
17
155
  ```
18
156
 
157
+
158
+
159
+ 2つ目:
160
+
161
+ get_weather.py
162
+
163
+ ```Python3
164
+
165
+ import tkinter as tk
166
+
167
+ import tkinter.messagebox as msg
168
+
169
+ import requests
170
+
19
- エラーメッセージ
171
+ import os
172
+
173
+ def weather(date):
174
+
175
+ api_url = 'http://weather.livedoor.com/forecast/webservice/json/v1';
176
+
177
+ payload={'city':'130010'}
178
+
179
+ weather_data = requests.get(api_url, params=payload).json()
180
+
181
+ speech_data=(weather_data['forecasts'][date]['dateLabel'] + 'の天気は、' + weather_data['forecasts'][date]['telop'] )
182
+
183
+ response=msg.showinfo('天気を調べる', speech_data)
184
+
185
+
186
+
187
+
20
188
 
21
189
  ```
22
190
 
23
- なし
24
-
25
- ### 該当のソースコード
26
-
27
-
28
-
29
- ```ここに言語名を入力
30
-
31
- ソースコード
32
-
33
- ```def weatherget():
34
-
35
- weatherwindow=tk.Tk()
36
-
37
- weatherwindow.title('天気を調べる')
38
-
39
- weatherwindow.geometry('150x150')
40
-
41
- radio_value=tk.IntVar()
42
-
43
- radio_value.set(0)
44
-
45
- character={0:'今日の天気',1:'明日の天気',2:'明後日の天気'}
46
-
47
- tk.Radiobutton(weatherwindow, text=character[0], variable = radio_value, value = 0).pack()
48
-
49
- tk.Radiobutton(weatherwindow, text=character[1], variable = radio_value, value = 1).pack()
50
-
51
- tk.Radiobutton(weatherwindow, text=character[2], variable = radio_value, value = 2).pack()
52
-
53
- def get():
54
-
55
- date = radio_value.get()
56
-
57
- print(date)
58
-
59
- get_weather.weather(date)
60
-
61
- weatherwindow.destroy()
62
-
63
- tk.Button(weatherwindow, text='調べる', command=get).pack()
64
-
65
-
66
-
67
-
68
-
69
191
  ### 試したこと
70
192
 
71
193
 
72
194
 
195
+ ・weatherget関数単独で実行してみた(→何故か動いた。しかし、Tkinterから呼び出すことが私の目標なので、別の解決方法を現在探しています。
196
+
197
+
198
+
199
+ ### 補足情報
200
+
73
- ここ問題に対して試したこと記載してください。
201
+ 天気予報を取得するは、LINE株式会社が提供する「Weather Hacks」の「お天気Webサービス」利用しています
74
-
75
-
76
-
202
+
77
- ### 補足情報(FW/ツールのバージョンなど)
203
+ OSは、Linux Debianのバージョン 10(buster)を使用しています。
78
-
79
-
80
-
81
- ここにより詳細な情報を記載してください。