回答編集履歴
1
質問の編集を受けて、回答を追記
test
CHANGED
@@ -51,3 +51,91 @@
|
|
51
51
|
weatherget()
|
52
52
|
|
53
53
|
```
|
54
|
+
|
55
|
+
|
56
|
+
|
57
|
+
---
|
58
|
+
|
59
|
+
|
60
|
+
|
61
|
+
**【編集を受けて追記】**
|
62
|
+
|
63
|
+
|
64
|
+
|
65
|
+
今回、サブウィンドウの生成に``tk.Tk()``を呼んでおりますが、``tk.Toplevel()``を使用してください。
|
66
|
+
|
67
|
+
|
68
|
+
|
69
|
+
サブウィンドウを生成する際にトップレベルウィジェット(tk.Tk())を生成してしまいますと、サブウィンドウの``mainloop()``が動作している間、親ウィンドウの``mainloop()``が動作しなくなるために不具合を引き起こします。
|
70
|
+
|
71
|
+
``tk.Toplevel()`` の場合は親ウィンドウの ``mainloop()`` に同居しますので、新たに``mainloop()`` を呼ぶ必要がなく、親ウィンドウとサブウィンドウを同時に動作させることができます。
|
72
|
+
|
73
|
+
|
74
|
+
|
75
|
+
ということで、weatherget関数を書き換えると以下のようになります。
|
76
|
+
|
77
|
+
|
78
|
+
|
79
|
+
```Python
|
80
|
+
|
81
|
+
def weatherget(main_window):
|
82
|
+
|
83
|
+
# 変更:tk.Tk ではなく Toplevel(サブウィンドウ) を使う
|
84
|
+
|
85
|
+
weatherwindow=tk.Toplevel(main_window)
|
86
|
+
|
87
|
+
# 追加:modal(main_windowのコントロールを抑制する) に設定
|
88
|
+
|
89
|
+
# これを行わないとサブウィンドウ表示中も親ウィンドウのボタンが押せてしまう
|
90
|
+
|
91
|
+
weatherwindow.grab_set()
|
92
|
+
|
93
|
+
weatherwindow.title('天気を調べる')
|
94
|
+
|
95
|
+
weatherwindow.geometry('150x150')
|
96
|
+
|
97
|
+
radio_value=tk.IntVar()
|
98
|
+
|
99
|
+
radio_value.set(0)
|
100
|
+
|
101
|
+
character={0:'今日の天気',1:'明日の天気',2:'明後日の天気'}
|
102
|
+
|
103
|
+
tk.Radiobutton(weatherwindow, text=character[0], variable = radio_value, value = 0).pack()
|
104
|
+
|
105
|
+
tk.Radiobutton(weatherwindow, text=character[1], variable = radio_value, value = 1).pack()
|
106
|
+
|
107
|
+
tk.Radiobutton(weatherwindow, text=character[2], variable = radio_value, value = 2).pack()
|
108
|
+
|
109
|
+
def get():
|
110
|
+
|
111
|
+
date = radio_value.get()
|
112
|
+
|
113
|
+
print(date)
|
114
|
+
|
115
|
+
get_weather.weather(date)
|
116
|
+
|
117
|
+
weatherwindow.destroy()
|
118
|
+
|
119
|
+
tk.Button(weatherwindow, text='調べる', command=get).pack()
|
120
|
+
|
121
|
+
# 削除 : mainloopは親 Windowと共通なのでこの処理はいらない
|
122
|
+
|
123
|
+
# weatherwindow.mainloop()
|
124
|
+
|
125
|
+
```
|
126
|
+
|
127
|
+
|
128
|
+
|
129
|
+
また、この変更で関数に引数(main_window : メインウィンドウ)が追加されたので呼び出し側も
|
130
|
+
|
131
|
+
|
132
|
+
|
133
|
+
```Python
|
134
|
+
|
135
|
+
button=tk.Button(window,text="天気を調べる", command=lambda: weatherget(window)).pack()
|
136
|
+
|
137
|
+
```
|
138
|
+
|
139
|
+
|
140
|
+
|
141
|
+
のように修正する必要があります。
|