[解決済み] Tkinterのコールバックで奇妙な例外が発生する
質問
私はまだ私の小さなTkinterプロジェクトに取り組んでいます。それは、シリアルラインからの受信テキストをテキストウィジェットに印刷し、いくつかの色付けを適用したシンプルなロギングコンソールです。
質問が一つ公開されていますので、こちらでご確認ください。 Python Tkinter Text Widget with Auto & Custom Scroll
しかし、手動スクロールがなくても(だから、私は
self.text.yview(END)
でテキストを挿入した後、一番下まで自動スクロールさせることができます。
self.text.insert(END, str(parsed_line))
.
スクリプトは実際に動作しますが、時々Tkinterスレッド内でいくつかの"silent"例外が発生し、アプリケーション全体をクラッシュさせることはありません。
Exception in Tkinter callback
Traceback (most recent call last):
File "C:\Python26\lib\lib-tk\Tkinter.py", line 1410, in __call__
return self.func(*args)
File "C:\Python26\lib\lib-tk\Tkinter.py", line 2813, in set
self.tk.call((self._w, 'set') + args)
TclError: expected floating-point number but got "0.7807017543859649integer but got "end""
Exception in Tkinter callback
Traceback (most recent call last):
File "C:\Python26\lib\lib-tk\Tkinter.py", line 1410, in __call__
return self.func(*args)
File "C:\Python26\lib\lib-tk\Tkinter.py", line 2813, in set
self.tk.call((self._w, 'set') + args)
TclError: invalid command name ".15427224integer but got "end""
まるで、あるメソッドが整数を期待し、文字列
integer but got "end"
を、float を期待するメソッドに渡すと、エラーメッセージと一緒に連結されます。この文字列の中の浮動小数点数は、私がテキスト・ウィジェットに付けたスクロールバーの位置のようです。
(...)
scrollbar = Scrollbar(root)
scrollbar.pack(side=RIGHT, fill=Y)
text = Text(wrap=WORD, yscrollcommand=scrollbar.set)
scrollbar.config(command=text.yview)
text.pack(expand=YES, fill=BOTH)
(...)
短時間にたくさんの行を挿入したときに起こるような気がしています。しかし、Tkinterとやりとりしているスレッドは1つだけなので、スレッドの問題であるはずがありません。
を適用する前にも、このようなエラーが非常にランダムに発生しました。
str()
関数を
parsed_line
で
self.text.insert(END, str(parsed_line))
.
これは非常に奇妙な動作で、どなたかこれがどういうことで、どうすれば直るのかを説明していただけませんか。
ありがとうございました。
解決方法は?
mtTkinterはTkinterでマルチスレッドを可能にします。
http://tkinter.unpythonic.net/wiki/mtTkinter
Tkinterの代わりにmtTkinterをインポートするだけです。これにより、複数のスレッドからテキストウィジェットにテキストを挿入する際に、競合が発生しなくなります。私はこれを私が書いたインスタントメッセージングソフトウェアに使いましたが、素晴らしくうまくいきました。
関連
-
Python カメの描画コマンドとその例
-
パッケージングツールPyinstallerの使用と落とし穴の回避
-
[解決済み】「RuntimeError: dictionary changed size during iteration」エラーを回避する方法とは?
-
[解決済み】ilocが「IndexError: single positional indexer is out-of-bounds」を出す。
-
[解決済み】NameError: 名前 'self' が定義されていません。
-
[解決済み】TypeError: 'builtin_function_or_method' オブジェクトは、添え字を書くことができません。
-
[解決済み] Pythonで例外を手動で発生(スロー)させる
-
[解決済み] JUnit 4のテストで、ある例外が投げられたことをどのように断言しますか?
-
[解決済み] コールバック内で正しい `this` にアクセスする方法
-
[解決済み] Pythonで例外を表示するには?
最新
-
nginxです。[emerg] 0.0.0.0:80 への bind() に失敗しました (98: アドレスは既に使用中です)
-
htmlページでギリシャ文字を使うには
-
ピュアhtml+cssでの要素読み込み効果
-
純粋なhtml + cssで五輪を実現するサンプルコード
-
ナビゲーションバー・ドロップダウンメニューのHTML+CSSサンプルコード
-
タイピング効果を実現するピュアhtml+css
-
htmlの選択ボックスのプレースホルダー作成に関する質問
-
html css3 伸縮しない 画像表示効果
-
トップナビゲーションバーメニュー作成用HTML+CSS
-
html+css 実装 サイバーパンク風ボタン
おすすめ
-
pythonを使ったオフィス自動化コード例
-
python implement mysql add delete check change サンプルコード
-
Python interpreted model libraryによる機械学習モデル出力の可視化 Shap
-
[解決済み】socket.error: [Errno 48] アドレスはすでに使用中です。
-
[解決済み】「SyntaxError.Syntax」は何ですか?Missing parentheses in call to 'print'」はPythonでどういう意味ですか?
-
[解決済み】インポートエラー。モジュール名 urllib2 がない
-
[解決済み】Flask ImportError: Flask という名前のモジュールがない
-
[解決済み】Python: OverflowError: 数学の範囲エラー
-
[解決済み】ValueError: xとyは同じサイズでなければならない
-
[解決済み】django インポートエラー - core.managementという名前のモジュールがない