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

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

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

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

Tkinter

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

Python

Pythonは、コードの読みやすさが特徴的なプログラミング言語の1つです。 強い型付け、動的型付けに対応しており、後方互換性がないバージョン2系とバージョン3系が使用されています。 商用製品の開発にも無料で使用でき、OSだけでなく仮想環境にも対応。Unicodeによる文字列操作をサポートしているため、日本語処理も標準で可能です。

解決済

プログラムを実行した際の応答なしを無くしたい

calsonic
calsonic

総合スコア13

Python 3.x

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

Tkinter

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

Python

Pythonは、コードの読みやすさが特徴的なプログラミング言語の1つです。 強い型付け、動的型付けに対応しており、後方互換性がないバージョン2系とバージョン3系が使用されています。 商用製品の開発にも無料で使用でき、OSだけでなく仮想環境にも対応。Unicodeによる文字列操作をサポートしているため、日本語処理も標準で可能です。

3回答

0リアクション

1クリップ

14982閲覧

投稿2019/01/14 10:45

前提・実現したいこと

Modbusで通信を行いPLCより連番コード、判定結果1、判定結果2、・・・総判定結果数を受け取り
受け取ったデータを別のPCから送られてきた画像ファイルと紐付け、画像ファイルの名前を連番コード+判定結果.bmpとしています

プログラム経験0から1週間ほどでいろんなところを継接ぎで追加していっているので通常ではありえないような書き方を
していると思いますが何卒お願いいたします

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

プログラムを実行後にGUIの画面を動かしたりすると応答なしの表示が出て固まってしまいます
実際のデータの受け取りとリストの表示などは少し遅いのですが行われています

エラーメッセージ

該当のソースコード

Python

import serial import tkinter as tk import tkinter.ttk as ttk import glob import os import re import time #変数とか port = ["COM0", "COM1", "COM2", "COM3", "COM4", "COM5"] kai = ["", "OK", "NG"] comp = ["未完了", "完了"] complete = b"\x00" root = tk.Tk() root.title('試作') root.geometry("800x600") tree = ttk.Treeview(root) tree.pack(fill="x", padx=20, pady=20) def start(): #完了信号待ち while True: global complete if complete == b"\x00": btn_click() elif complete == b"\x01": print("作業完了信号受信") file_operation() break def btn_click(): #シリアル通信部分 global complete global BC global k1, k2, k3, k4, k5, k6, k7 client = serial.Serial(port[5], 9600, timeout=0.5, parity=serial.PARITY_EVEN, stopbits=serial.STOPBITS_ONE) size = 128 print(client.name) #S:1,F:4,Addr:3000,Data:100 commando = b"\x01\x04\x30\x00\x00\x64\xfe\xe1" client.write(commando) result1 = client.readline() print(result1.hex()) complete = result1[4:5] BC = result1[5:7] k1 = result1[7:9] k2 = result1[9:11] k3 = result1[11:13] k4 = result1[13:15] k5 = result1[15:17] k6 = result1[17:19] k7 = result1[19:21] #k101あたりに送られてくるデータ数を入れる client.close() def file_operation(): global filename global BC global kai global complete path = 'c:/test/' glob.glob(os.path.join(path, '*.txt')) os.chdir(path) filename = glob.glob('*.txt') #ここらへんでif文入れて送られてきたデータ数に合わせて出力する print(filename[0]) print(filename[1]) print(filename[2]) time_str = time.strftime('%Y%m%d') os.rename(filename[0], BC.hex() + "-1-" + kai[int.from_bytes(k1, 'big')] + time_str + '.txt') os.rename(filename[1], BC.hex() + "-2-" + kai[int.from_bytes(k2, 'big')] + time_str + '.txt') os.rename(filename[2], BC.hex() + "-3-" + kai[int.from_bytes(k3, 'big')] + time_str + '.txt') tree.insert("", "end", values=(BC.hex(), kai[int.from_bytes(k1, 'big')], filename[0], BC.hex() + "-1-" + kai[int.from_bytes(k1, 'big')] + time_str + '.txt')) tree.insert("", "end", values=(BC.hex(), kai[int.from_bytes(k2, 'big')], filename[1], BC.hex() + "-2-" + kai[int.from_bytes(k2, 'big')] + time_str + '.txt')) tree.insert("", "end", values=(BC.hex(), kai[int.from_bytes(k3, 'big')], filename[2], BC.hex() + "-3-" + kai[int.from_bytes(k3, 'big')] + time_str + '.txt')) client = serial.Serial(port[5], 9600, timeout=0.5, parity=serial.PARITY_EVEN, stopbits=serial.STOPBITS_ONE) size = 128 #作業完了信号をOFFにする commando1 = b"\x01\x06\x30\x00\x00\x00\x86\xca" client.write(commando1) client.close() complete = b"\x00" btn = tk.Button(root,text='取得スタート',width=10,bg="gray", command=start) btn.pack(fill='x', padx=30) tree["columns"] = (1, 2, 3, 4) tree["show"] = "headings" tree.column(1, anchor='center', width=75) tree.column(2, anchor='center', width=75) tree.column(3, anchor='center', width=120) tree.column(4, anchor='center', width=120) tree.heading(1, text="連番") tree.heading(2, text="判定") tree.heading(3, text="変更前ファイル名") tree.heading(4, text="変更後ファイル名") tree.pack(side=tk.TOP, fill=tk.BOTH, expand=1) root.mainloop()

試したこと

シリアル通信のタイムアウトを2秒など長めにしても変化がありませんでした

補足情報(FW/ツールのバージョンなど)

ここにより詳細な情報を記載してください。

以下のような質問にはリアクションをつけましょう

  • 質問内容が明確
  • 自分も答えを知りたい
  • 質問者以外のユーザにも役立つ

リアクションが多い質問は、TOPページの「注目」タブのフィードに表示されやすくなります。

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

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

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

下記のような質問は推奨されていません。

  • 間違っている
  • 質問になっていない投稿
  • スパムや攻撃的な表現を用いた投稿

適切な質問に修正を依頼しましょう。

まだ回答がついていません

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

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

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

ただいまの回答率
86.12%

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

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

質問する

関連した質問

同じタグがついた質問を見る

Python 3.x

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

Tkinter

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

Python

Pythonは、コードの読みやすさが特徴的なプログラミング言語の1つです。 強い型付け、動的型付けに対応しており、後方互換性がないバージョン2系とバージョン3系が使用されています。 商用製品の開発にも無料で使用でき、OSだけでなく仮想環境にも対応。Unicodeによる文字列操作をサポートしているため、日本語処理も標準で可能です。