回答編集履歴
2
コードの修正、変数名の整理
answer
CHANGED
@@ -13,11 +13,10 @@
|
|
13
13
|
|
14
14
|
|
15
15
|
```python
|
16
|
-
|
17
16
|
import tkinter as tk
|
18
17
|
|
19
18
|
def resized(e):
|
20
|
-
|
19
|
+
canvas = e.widget # <-- bind 対象は win ではなく canvas
|
21
20
|
column = 3
|
22
21
|
row = 2
|
23
22
|
r = 50
|
@@ -25,27 +24,30 @@
|
|
25
24
|
# 他のウィジェットを表示する時、
|
26
25
|
# ウィンドウサイズとキャンバスのサイズは一致しないことがあるので、
|
27
26
|
# キャンバスサイズを元に計算する。
|
28
|
-
|
27
|
+
canvas_width = canvas.winfo_width()
|
29
|
-
|
28
|
+
canvas_height = canvas.winfo_height()
|
29
|
+
|
30
|
+
# 等間隔に分割する際の、セルの縦横幅
|
31
|
+
cell_width = canvas_width // column
|
32
|
+
cell_height = canvas_height // row
|
30
33
|
|
31
|
-
|
34
|
+
canvas.delete("oval")
|
32
|
-
for x in range(
|
35
|
+
for x in range(cell_width//2, canvas_width, cell_width):
|
33
|
-
for y in range(
|
36
|
+
for y in range(cell_height//2, canvas_height, cell_height):
|
34
37
|
x1, x2 = x-r, x+r
|
35
38
|
y1, y2 = y-r, y+r
|
36
39
|
|
37
|
-
|
40
|
+
canvas.create_oval(x1, y1, x2, y2, tag="oval", fill="red", outline="blue", width=5)
|
38
41
|
|
39
42
|
if __name__ == '__main__':
|
40
43
|
win = tk.Tk()
|
41
44
|
win.rowconfigure(0, weight=1)
|
42
45
|
win.columnconfigure(0, weight=1)
|
43
46
|
|
44
|
-
|
47
|
+
canvas = tk.Canvas(win)
|
45
|
-
|
48
|
+
canvas.grid(row=0, column=0, sticky="nsew")
|
46
|
-
|
49
|
+
canvas.bind("<Configure>", resized) # <-- win.bind ではなく canvas のイベントにする
|
47
50
|
win.mainloop()
|
48
|
-
|
49
51
|
```
|
50
52
|
|
51
53
|
|
1
コードを追加
answer
CHANGED
@@ -12,6 +12,43 @@
|
|
12
12
|
他の円の座標も求まります。(range関数が使えます)
|
13
13
|
|
14
14
|
|
15
|
+
```python
|
16
|
+
|
17
|
+
import tkinter as tk
|
18
|
+
|
19
|
+
def resized(e):
|
20
|
+
cv = e.widget # <-- bind 対象は win ではなく canvas
|
21
|
+
column = 3
|
22
|
+
row = 2
|
23
|
+
r = 50
|
24
|
+
|
25
|
+
# 他のウィジェットを表示する時、
|
26
|
+
# ウィンドウサイズとキャンバスのサイズは一致しないことがあるので、
|
27
|
+
# キャンバスサイズを元に計算する。
|
28
|
+
width = cv.winfo_width()
|
29
|
+
height = cv.winfo_height()
|
30
|
+
|
31
|
+
cv.delete("oval")
|
32
|
+
for x in range(width//column//2, width, width//column):
|
33
|
+
for y in range(height//row//2, height, height//row):
|
34
|
+
x1, x2 = x-r, x+r
|
35
|
+
y1, y2 = y-r, y+r
|
36
|
+
|
37
|
+
cv.create_oval(x1, y1, x2, y2, tag="oval", fill="red", outline="blue", width=5)
|
38
|
+
|
39
|
+
if __name__ == '__main__':
|
40
|
+
win = tk.Tk()
|
41
|
+
win.rowconfigure(0, weight=1)
|
42
|
+
win.columnconfigure(0, weight=1)
|
43
|
+
|
44
|
+
cv = tk.Canvas(win)
|
45
|
+
cv.grid(row=0, column=0, sticky="nsew")
|
46
|
+
cv.bind("<Configure>", resized) # <-- win.bind ではなく canvas のイベントにする
|
47
|
+
win.mainloop()
|
48
|
+
|
49
|
+
```
|
50
|
+
|
51
|
+
|
15
52
|
----
|
16
53
|
尚、tk.Tk() 直下で所得してるウィンドウのサイズですが、
|
17
54
|
初期化時の円の描画は意図通りになってません。
|