回答編集履歴
3
コード変更に伴い回答内の文章も修正
test
CHANGED
@@ -18,9 +18,15 @@
|
|
18
18
|
|
19
19
|
キャンバスのサイズを得るには、`canvas["width"]` や `cavas.winfo_reqwidth()` を用います。
|
20
20
|
|
21
|
-
mainloop が始まる前では、キャンバスのサイズは 1 になっています。
|
21
|
+
~~mainloop が始まる前では、キャンバスのサイズは 1 になっています。
|
22
|
-
|
22
|
+
|
23
|
-
(その為 update() で更新してるのだと思いますが、不十分なケースが有るので)
|
23
|
+
(その為 update() で更新してるのだと思いますが、不十分なケースが有るので)~~
|
24
|
+
|
25
|
+
|
26
|
+
|
27
|
+
追記: winfo_width() でサイズを正常に取れないケースを再現するコードを掲載してましたが、
|
28
|
+
|
29
|
+
質問のコードに合わせて、ここは修正しました。
|
24
30
|
|
25
31
|
|
26
32
|
|
@@ -48,7 +54,11 @@
|
|
48
54
|
|
49
55
|
- `create_text(canvas.winfo_reqwidth()//2, winfo_reqheight()//2, ...)`
|
50
56
|
|
51
|
-
- キャンバス内容の初期化処理をタイマーから呼び出す。
|
57
|
+
- ~~キャンバス内容の初期化処理をタイマーから呼び出す。~~
|
58
|
+
|
59
|
+
追記: できれば mainloop 後に初期化したほうが良いのですが、
|
60
|
+
|
61
|
+
今回の問題には直接該当せず。
|
52
62
|
|
53
63
|
|
54
64
|
|
2
コード修正 winfo_width() で正常に値を取れないケースを再現するコードでしたが、canvas.update() のタイミングを質問のコードと同じになるように修正。
test
CHANGED
@@ -100,6 +100,8 @@
|
|
100
100
|
|
101
101
|
canvas = tk.Canvas(root, width=400, height=400)
|
102
102
|
|
103
|
+
canvas.pack(fill=tk.BOTH, expand=True)
|
104
|
+
|
103
105
|
|
104
106
|
|
105
107
|
## mainloop 前に呼び出す(現状のコードに該当)
|
@@ -127,8 +129,6 @@
|
|
127
129
|
# root.after(1, root.after_idle, init_canvas, "after 1 idle", canvas)
|
128
130
|
|
129
131
|
|
130
|
-
|
131
|
-
canvas.pack(fill=tk.BOTH, expand=True)
|
132
132
|
|
133
133
|
root.mainloop()
|
134
134
|
|
1
書きかけだった文章の補完
test
CHANGED
@@ -146,21 +146,39 @@
|
|
146
146
|
|
147
147
|
物理的に切れた時の挙動は デバイス固有またはOS によっても異なると思いますが、
|
148
148
|
|
149
|
+
障害を検知した場合は、速やかにリソースを開放して、
|
149
150
|
|
150
|
-
|
151
|
-
|
151
|
+
エラーメッセージを表示といった対応をすることになると思います。
|
152
152
|
|
153
153
|
|
154
154
|
|
155
155
|
|
156
156
|
|
157
|
+
切断時にGUIが一時的にフリーズする場合は、
|
157
158
|
|
159
|
+
原因はイベントループ内での時間のかかるブロッキング処理なので、
|
158
160
|
|
161
|
+
該当する処理(カメラからの読み込み)を別スレッドへ移すことで回避できます。
|
162
|
+
|
159
|
-
|
163
|
+
キャンバスへの描画はメインスレッド側で行う必要があるため、Queueで通信。
|
160
164
|
|
161
165
|
|
162
166
|
|
167
|
+
※ 内蔵カメラでは発生しないかもしれません。
|
168
|
+
|
169
|
+
|
170
|
+
|
171
|
+
|
172
|
+
|
173
|
+
切断時にOSが落ちる場合は、
|
174
|
+
|
163
|
-
デバイス固有の問題、デバイスドライバーの不具合等には、
|
175
|
+
デバイス固有の問題、デバイスドライバーの不具合等には、
|
176
|
+
|
177
|
+
アプリケーション側では対応は難しいです。
|
178
|
+
|
179
|
+
|
180
|
+
|
181
|
+
(カメラではありませんが、古いusb接続のオーディオインターフェースで経験しました。)
|
164
182
|
|
165
183
|
|
166
184
|
|