🎄teratailクリスマスプレゼントキャンペーン2024🎄』開催中!

\teratail特別グッズやAmazonギフトカード最大2,000円分が当たる!/

詳細はこちら
Matplotlib

MatplotlibはPythonのおよび、NumPy用のグラフ描画ライブラリです。多くの場合、IPythonと連携して使われます。

Python 3.x

Python 3はPythonプログラミング言語の最新バージョンであり、2008年12月3日にリリースされました。

Tkinter

Tkinterは、GUIツールキットである“Tk”をPythonから利用できるようにした標準ライブラリである。

Q&A

1回答

3993閲覧

tkinter GUIで、threadingして並列処理するとグラフが正常に表示されない

goki_gottan

総合スコア168

Matplotlib

MatplotlibはPythonのおよび、NumPy用のグラフ描画ライブラリです。多くの場合、IPythonと連携して使われます。

Python 3.x

Python 3はPythonプログラミング言語の最新バージョンであり、2008年12月3日にリリースされました。

Tkinter

Tkinterは、GUIツールキットである“Tk”をPythonから利用できるようにした標準ライブラリである。

0グッド

0クリップ

投稿2020/12/11 18:57

tkinter GUIで、for文等を使用している重くなる処理をthreadを使用して別スレッドで処理させておりますが、for文終了とともにグラフを出力させているのですが、グラフがちゃんと表示されず、応答なしとなるエラー

threadを使用しないとちゃんと表示されるので、threadが悪さしていると思います。
また、グラフ処理自体をさらに別処理threadを設けても表示されず、固まります。

threadがちゃんと終わっていないのかと思い、thread.start()として、その後にthread.join()にした場合、今度は、threadの別処理をせず、そのまま固まります。

threadを使用して、グラフ表示する方法は有りませんでしょうか?

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

Moineau26518805

2020/12/11 20:55

>threadがちゃんと終わっていないのかと思い、thread.start()として、その後にthread.join()にした場合、今度は、threadの別処理をせず、そのまま固まります。 thead処理が本当に作動していないのかprint()やタスク監視ツール(topやhtop,タスクマネージャなど)で確認していますか? 単純にthead処理が終わっていないだけかもしれません thread.join()するとプログラムはthread処理が終わるまで停止するため、見た目は固まった状態や応答なしの状態になります
goki_gottan

2020/12/12 13:01

ありがとうございます。 thread.start()のあとに、thread.joinを書きますと、canvasの図形の色を変える処理を入れているのですが、色変わりません。 明らかにハングアップしております
goki_gottan

2020/12/12 13:02

printも入れておりますが、printされません。
guest

回答1

0

プログラムソースが書かれていないので原因はわからないです
最低でも

  • 開発、実行しているOSは何か
  • Pythonのバージョン
  • tkinter,matplotlibのバージョン
  • 問題の起きてるソース

上記を提示してもらわなければ原因の特定はできません

わからないなりに考えると、以下のうちのどれかの原因に当てはまる可能性があります

  1. Viewの操作を別スレッドで行っていませんか?

UIのあるシステムは基本的にMVCモデルを使った方がわかりやすいです
MVCモデル

  1. きちんとロード画面の実装を行っていますか?

Theadの処理が終わるまで仮の画面を表示させないと「応答なし」になります
tkinterで遅い処理を別スレッドに投げ画面が固まらないようにする
上記ページでは
メインスレッドでControllerとViewを行って
サブスレッドでModelを行っています

  1. MatplotlibをTkinterで使える書き方があるのですが、それを使用していますか?

 plt.figureのインスタンスを生成する必要があるみたいですが、作っていますか?
plt.plot(),plt.show()などを行っていませんか?
Tkinterにmatplotlibグラフを埋め込む
Tkinterでmatplotlibを埋め込んでグラフ表示する方法

投稿2020/12/12 23:09

Moineau26518805

総合スコア44

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

goki_gottan

2020/12/13 13:13

ありがとうございます。 コードは明日書きますが、一番気になった3について、plt.show、plt.plot使っております。 埋め込みではなく、ウインドウから出しております。spyderを使用しており、標準のplt.showと書けば表示されるウインドウを使用しております。 GUI内に埋め込む必要ありますか? ちなまに、threadを使用しなければ、ちゃんとグラフウインドウは生成され、プロットされます
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

まだベストアンサーが選ばれていません

会員登録して回答してみよう

アカウントをお持ちの方は

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.36%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問