質問をすることでしか得られない、回答やアドバイスがある。

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

新規登録して質問してみよう
ただいま回答率
85.48%
Python 3.x

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

Tkinter

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

Q&A

解決済

1回答

6131閲覧

Tkinter + Pyserial

saratoga

総合スコア13

Python 3.x

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

Tkinter

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

0グッド

0クリップ

投稿2019/01/14 23:03

前提・実現したいこと

TkinterによるGUIを備えたシリアル送受信プログラムを書きたいと思います。

発生している問題・エラーメッセージ

ところが、Tkinterはmainloopで無限ループ、シリアル通信は受信待ちの無限ループで、それぞれ非同期なので自主的に相手に実行状態を渡すことができません。

試したこと

そこで Thread を使って別のスレッドにしようと思いましたが、Tkinterを使ったGUI側も、Pyserialを使った通信側も、関数化してスレッドに持っていこうとするとそれぞれエラーが起こりうまくいきません。

スレッド化する以外の方法でGUIつき通信プログラムをPython3で書くにはどんなやり方があるでしょうか?

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

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

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

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

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

guest

回答1

0

ベストアンサー

Tkinter with Serialを参照ください。
ノンブロッキングでシリアル受信する関数を用意し、GUI側からafter(で定期的に受信関数を呼び出すことでGUI処理をブロックしないような手法をとっています。

なお、Python3で動作させるには以下修正が必要です。

  • from Tkinter ~from tkinter ~
  • c = ser.read()c = ser.read().decode('ascii')

投稿2019/01/15 01:01

can110

総合スコア38266

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

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

saratoga

2019/01/15 13:34

考え方がわかりました。ありがとうございます。参照先をざっとみてみましたが、afterの用法と挙動がピンとこなかったので、afterの説明を探してみます。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問