質問編集履歴
3
発生時のスクリーンショットを追加しました。
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
文法を少し修正しました。
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
情報を追加しました。
test
CHANGED
@@ -1 +1 @@
|
|
1
|
-
|
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
|
-
|
203
|
+
OSは、Linux Debianのバージョン 10(buster)を使用しています。
|
78
|
-
|
79
|
-
|
80
|
-
|
81
|
-
ここにより詳細な情報を記載してください。
|