回答編集履歴

3

修正

2020/12/11 12:37

投稿

teamikl
teamikl

スコア8664

test CHANGED
@@ -44,7 +44,7 @@
44
44
 
45
45
 
46
46
 
47
- canvas.bind("<B3-Motion>", on_erase) # ドラッグで消しゴム
47
+ canvas.bind("<B3-Motion>", on_erase) # マウスの右ボタンをドラッグで消しゴム
48
48
 
49
49
  ```
50
50
 

2

消しゴム機能の実装例を追記

2020/12/11 12:37

投稿

teamikl
teamikl

スコア8664

test CHANGED
@@ -22,6 +22,36 @@
22
22
 
23
23
 
24
24
 
25
+
26
+
27
+ 追記: 消しゴム機能
28
+
29
+ ```python
30
+
31
+ def on_erase(e, r=20): # r=消しゴムの範囲
32
+
33
+ x = canvas.canvasx(e.x)
34
+
35
+ y = canvas.canvasy(e.y)
36
+
37
+ # カーソル周辺(指定座標範囲内)の要素を所得
38
+
39
+ for item in canvas.find_enclosed(x-r, y-r, x+r, y+r):
40
+
41
+ if canvas.type(item) == "line": # 画像を削除してしまわないように、種類判別
42
+
43
+ canvas.delete(item)
44
+
45
+
46
+
47
+ canvas.bind("<B3-Motion>", on_erase) # →ドラッグで消しゴム
48
+
49
+ ```
50
+
51
+
52
+
53
+
54
+
25
55
  ----
26
56
 
27
57
  ImageDraw への直接描画の取り消し操作は、出来ません。

1

sample code 追加 (repl.it)

2020/12/11 12:36

投稿

teamikl
teamikl

スコア8664

test CHANGED
@@ -18,7 +18,7 @@
18
18
 
19
19
  deque に create_line の戻り値を追加していけば、
20
20
 
21
- 直近の線を delete することで undo 操作を実装出来ます。
21
+ 直近の線を delete することで undo 操作を実装出来ます。[Demo](https://repl.it/@MiKLTea/TkCanvasUndo#main.py)
22
22
 
23
23
 
24
24