質問編集履歴
3
追加
title
CHANGED
File without changes
|
body
CHANGED
@@ -69,4 +69,65 @@
|
|
69
69
|
|
70
70
|
同様の方法では解決できないかもしれません。
|
71
71
|
|
72
|
-
対処方法あったら教えてください。
|
72
|
+
対処方法あったら教えてください。
|
73
|
+
|
74
|
+
追記
|
75
|
+
ppaul様からの回答をもとに書き換えたら解決
|
76
|
+
|
77
|
+
```Python
|
78
|
+
import tkinter as tk
|
79
|
+
|
80
|
+
open_flag = True
|
81
|
+
|
82
|
+
class MyToplevel:
|
83
|
+
def call_open(self, master):
|
84
|
+
global open_flag
|
85
|
+
if open_flag:
|
86
|
+
self.open(master)
|
87
|
+
|
88
|
+
|
89
|
+
def open(self, master):
|
90
|
+
global open_flag
|
91
|
+
open_flag = False
|
92
|
+
|
93
|
+
self.master = master
|
94
|
+
|
95
|
+
self.tl = tk.Toplevel()
|
96
|
+
self.tl.wait_visibility()
|
97
|
+
self.tl.grab_set()
|
98
|
+
self.tl.transient(master)
|
99
|
+
|
100
|
+
self.l = tk.Label(self.tl, text="This is Toplevel.")
|
101
|
+
self.l.grid()
|
102
|
+
|
103
|
+
self.tl.protocol("WM_DELETE_WINDOW", self.close)
|
104
|
+
|
105
|
+
def close(self):
|
106
|
+
global open_flag
|
107
|
+
self.tl.grab_release()
|
108
|
+
if isinstance(self.master, tk.Toplevel):
|
109
|
+
self.tl.grab_set()
|
110
|
+
self.tl.destroy()
|
111
|
+
open_flag = True
|
112
|
+
|
113
|
+
|
114
|
+
def push(t, win):
|
115
|
+
for i in range(100):
|
116
|
+
print(i)
|
117
|
+
t.call_open(win)
|
118
|
+
|
119
|
+
|
120
|
+
if __name__ == "__main__":
|
121
|
+
t = MyToplevel()
|
122
|
+
|
123
|
+
win = tk.Tk()
|
124
|
+
win.geometry("400x300")
|
125
|
+
|
126
|
+
button = tk.Button(win, text="click", width=10)
|
127
|
+
button.grid()
|
128
|
+
|
129
|
+
button.bind("<ButtonRelease-1>", lambda e:push(t, win))
|
130
|
+
|
131
|
+
win.mainloop()
|
132
|
+
|
133
|
+
```
|
2
追加
title
CHANGED
File without changes
|
body
CHANGED
@@ -53,7 +53,7 @@
|
|
53
53
|
|
54
54
|
grab_set()を使っているので上記のような動作にはならないと思っていたのですが、grab_set()適用前に```MyToplevel.open()```を複数回呼び出しているのでしょうか。
|
55
55
|
|
56
|
-
過去の質問では、
|
56
|
+
過去の質問([Python3 Tkinter Toplevelが重なって表示されてしまいます](https://teratail.com/questions/265823))では、
|
57
57
|
```
|
58
58
|
t = tk.Toplevel(name="t")
|
59
59
|
```
|
1
修正
title
CHANGED
File without changes
|
body
CHANGED
@@ -51,7 +51,7 @@
|
|
51
51
|
期待動作:Toplevelは1個だけ生成する
|
52
52
|
実際の動作:ToplevelはButtonを押した数生成される。n個のToplevelを生成した場合、うち1つのToplevelにn個のウィジェットが全部配置され、ほかのToplevelには何も配置されていない。
|
53
53
|
|
54
|
-
grab_set()を使っているので上記のような動作にはならないと思っていたのですが、grab_set()適用前に
|
54
|
+
grab_set()を使っているので上記のような動作にはならないと思っていたのですが、grab_set()適用前に```MyToplevel.open()```を複数回呼び出しているのでしょうか。
|
55
55
|
|
56
56
|
過去の質問では、
|
57
57
|
```
|