回答編集履歴
4
for文を使った実装方法2を追記
test
CHANGED
@@ -146,6 +146,50 @@
|
|
146
146
|
|
147
147
|
|
148
148
|
|
149
|
+
追記: タイマーを使った解決策2 (案のみ
|
150
|
+
|
151
|
+
|
152
|
+
|
153
|
+
```python
|
154
|
+
|
155
|
+
|
156
|
+
|
157
|
+
def change_bg(color):
|
158
|
+
|
159
|
+
canvas['bg'] = color
|
160
|
+
|
161
|
+
|
162
|
+
|
163
|
+
# タイマーを時差で発動させることでアニメーションを表現
|
164
|
+
|
165
|
+
|
166
|
+
|
167
|
+
root.after(200*1, change_bg, "#000000")
|
168
|
+
|
169
|
+
root.after(200*2, change_bg, "#111111")
|
170
|
+
|
171
|
+
root.after(200*3, change_bg, "#222222")
|
172
|
+
|
173
|
+
root.after(200*4, change_bg, "#333333")
|
174
|
+
|
175
|
+
|
176
|
+
|
177
|
+
# for文を使って一度にタイマーを登録する
|
178
|
+
|
179
|
+
|
180
|
+
|
181
|
+
for idx, num in enumerate(range(16), start=1):
|
182
|
+
|
183
|
+
color = "#" + (f"{num:x}" * 6)
|
184
|
+
|
185
|
+
root.after(200*idx, change_bg, color)
|
186
|
+
|
187
|
+
```
|
188
|
+
|
189
|
+
|
190
|
+
|
191
|
+
デメリットはあって、ループ数が多い場合は効率的ではありません。
|
192
|
+
|
149
193
|
|
150
194
|
|
151
195
|
----
|
3
タイマーを重ねるときの注意点を追記
test
CHANGED
@@ -32,11 +32,13 @@
|
|
32
32
|
|
33
33
|
|
34
34
|
|
35
|
-
2パターン考えられます。
|
36
|
-
|
37
|
-
- Motion イベントで描画更新、タイマーで色を徐々に変更
|
38
|
-
|
39
|
-
|
35
|
+
タイマーの始動となる部分を、Motionイベント内のカーソルが任意の場所に来た時とします。
|
36
|
+
|
37
|
+
|
38
|
+
|
39
|
+
補足: 注意点は、タイマーが稼働してるときに他の色に変更するタイマーを重ねる場合の対応。
|
40
|
+
|
41
|
+
after() の戻り値を保存し、after_cancel() に渡す事で、タイマーの中断が可能です。
|
40
42
|
|
41
43
|
|
42
44
|
|
2
追記
test
CHANGED
@@ -24,6 +24,20 @@
|
|
24
24
|
|
25
25
|
|
26
26
|
|
27
|
+
追記: 以下サンプルコードはタイマーの利用を説明したものなので、
|
28
|
+
|
29
|
+
「カーソルを動かしたとき」ではなく、「ボタンをクリック」した時になってます。
|
30
|
+
|
31
|
+
適宜読み替えて下さい。
|
32
|
+
|
33
|
+
|
34
|
+
|
35
|
+
2パターン考えられます。
|
36
|
+
|
37
|
+
- Motion イベントで描画更新、タイマーで色を徐々に変更
|
38
|
+
|
39
|
+
- Motion イベントで色を変更、タイマーで定期的に描画更新
|
40
|
+
|
27
41
|
|
28
42
|
|
29
43
|
----
|
1
補足説明
test
CHANGED
@@ -246,6 +246,14 @@
|
|
246
246
|
|
247
247
|
label.config(bg=color)
|
248
248
|
|
249
|
+
|
250
|
+
|
251
|
+
|
252
|
+
|
253
|
+
# time.sleep/root.updateの代わり。タイマーで指定秒後に復帰する。
|
254
|
+
|
255
|
+
# 前述したような time.sleep/root.update の問題は起こらない。
|
256
|
+
|
249
257
|
yield 0.2
|
250
258
|
|
251
259
|
|