質問編集履歴

3

追加

2021/03/17 01:02

投稿

person
person

スコア223

test CHANGED
File without changes
test CHANGED
@@ -141,3 +141,125 @@
141
141
 
142
142
 
143
143
  対処方法あったら教えてください。
144
+
145
+
146
+
147
+ 追記
148
+
149
+ ppaul様からの回答をもとに書き換えたら解決
150
+
151
+
152
+
153
+ ```Python
154
+
155
+ import tkinter as tk
156
+
157
+
158
+
159
+ open_flag = True
160
+
161
+
162
+
163
+ class MyToplevel:
164
+
165
+ def call_open(self, master):
166
+
167
+ global open_flag
168
+
169
+ if open_flag:
170
+
171
+ self.open(master)
172
+
173
+
174
+
175
+
176
+
177
+ def open(self, master):
178
+
179
+ global open_flag
180
+
181
+ open_flag = False
182
+
183
+
184
+
185
+ self.master = master
186
+
187
+
188
+
189
+ self.tl = tk.Toplevel()
190
+
191
+ self.tl.wait_visibility()
192
+
193
+ self.tl.grab_set()
194
+
195
+ self.tl.transient(master)
196
+
197
+
198
+
199
+ self.l = tk.Label(self.tl, text="This is Toplevel.")
200
+
201
+ self.l.grid()
202
+
203
+
204
+
205
+ self.tl.protocol("WM_DELETE_WINDOW", self.close)
206
+
207
+
208
+
209
+ def close(self):
210
+
211
+ global open_flag
212
+
213
+ self.tl.grab_release()
214
+
215
+ if isinstance(self.master, tk.Toplevel):
216
+
217
+ self.tl.grab_set()
218
+
219
+ self.tl.destroy()
220
+
221
+ open_flag = True
222
+
223
+
224
+
225
+
226
+
227
+ def push(t, win):
228
+
229
+ for i in range(100):
230
+
231
+ print(i)
232
+
233
+ t.call_open(win)
234
+
235
+
236
+
237
+
238
+
239
+ if __name__ == "__main__":
240
+
241
+ t = MyToplevel()
242
+
243
+
244
+
245
+ win = tk.Tk()
246
+
247
+ win.geometry("400x300")
248
+
249
+
250
+
251
+ button = tk.Button(win, text="click", width=10)
252
+
253
+ button.grid()
254
+
255
+
256
+
257
+ button.bind("<ButtonRelease-1>", lambda e:push(t, win))
258
+
259
+
260
+
261
+ win.mainloop()
262
+
263
+
264
+
265
+ ```

2

追加

2021/03/17 01:02

投稿

person
person

スコア223

test CHANGED
File without changes
test CHANGED
@@ -108,7 +108,7 @@
108
108
 
109
109
 
110
110
 
111
- 過去の質問では、
111
+ 過去の質問([Python3 Tkinter Toplevelが重なって表示されてしまいます](https://teratail.com/questions/265823))では、
112
112
 
113
113
  ```
114
114
 

1

修正

2021/03/16 08:51

投稿

person
person

スコア223

test CHANGED
File without changes
test CHANGED
@@ -104,7 +104,7 @@
104
104
 
105
105
 
106
106
 
107
- grab_set()を使っているので上記のような動作にはならないと思っていたのですが、grab_set()適用前に関数を複数回呼び出しているのでしょうか。
107
+ grab_set()を使っているので上記のような動作にはならないと思っていたのですが、grab_set()適用前に```MyToplevel.open()```を複数回呼び出しているのでしょうか。
108
108
 
109
109
 
110
110