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

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

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

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

受付中

Pyside2 QThreadの使用方法について教えてください。

daizuyaro
daizuyaro

総合スコア0

Python

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

1回答

0評価

0クリップ

475閲覧

投稿2022/01/05 14:33

pythonでプログラミング歴が約2年の者です。まだまだ駆け出しでして、知識豊富な方に助言を頂きたく書き込みをしました。

プログラムの挙動
センサーから0.4sおきに測定結果を収集しており、閾値を超えた場合にアラーム音を鳴らすプログラムです。

質問内容
Qthredを利用し、アラーム音が鳴っている間も、センサーからの測定結果をUIの画面に表示したいのですが、アラーム音が鳴っている間はUIの更新ができません。
いろいろ調べてみたのですが、ノンブロッキング処理や非同期処理を利用するらしいのですが、pyside2のQThredでもこれと似たような方法ができませんでしょうか。

ご存知の経験豊富な先輩方で、方法をご存じの場合には添えていただけませんでしょうか

よろしくお願いいたします。

# リミットスイッチがopenの時間を計測する # プレス機などに設置されているリミットスイッチに利用 # 起動後 Start the Monitoring のボタンを押してプログラムを開始できる # 修了時はExit the Program のボタンを押してプログラムを終了する # 結果は C:\CT.csv に保存されている import sys from PySide2.QtWidgets import * from PySide2.QtCore import QTimer, QObject, Signal, Slot, QThread import time import datetime import csv from playsound import playsound import asyncio import mitutoyo # グローバル関数 経過時間の格納に利用 list_start = [] list_end = [] # csvファイルの保存先 file_path = "c://結果.csv" # リミットスイッチのON/OFFの判定用閾値 threshold = 0.040 sound01 = "D:\0.010.wav" class Main(QWidget): def __init__(self, parent=None): super().__init__(parent) #self.qtthread = None ??? self.initUI() # UIに関する設定 def initUI(self): # プログラムスタートボタン self.btn01 = self.auto_button = QPushButton("開始", self) self.btn01.clicked.connect(self.start_main) self.btn01.move(0, 0) self.btn01.resize(200, 50) # プログラムを閉じるボタン self.btn01 = self.auto_button = QPushButton("停止", self) self.btn01.clicked.connect(self.exit_main) self.btn01.move(0, 50) self.btn01.resize(200, 50) # CTの表示 self.ct_label = QLabel("", self) self.ct_label.move(900, 0) self.ct_label.resize(400, 100) self.style = ("font-size: 128px;") self.ct_label.setStyleSheet(self.style) # Status Barの表示 self.status_bar01 = QLabel("", self) self.status_bar01.move(0, 110) self.status_bar01.resize(2000,2000) self.show() # LCD表示 def lcd(self, aaa): self.value = (str("{}".format(aaa))) self.ct_label.setText(self.value) self.styleA = "QWidget{background-color:%s}" % ("green" if float(self.value) < threshold else "brown") self.status_bar01.setStyleSheet(self.styleA) # 警告音 def sound(self, aaa): self.value = (str("{}".format(aaa))) print(self.value) #self.ct_label.setText(self.background) if "異常発生" in self.value: return elif 0.009 < float(self.value): playsound(sound01) # メインプログラム def start_main(self): # thread処理 class Thread(QThread): send_value = Signal(str) # whileループでGPIO8のシグナルを監視 def run(self): while True: self.value = mitutoyo.mitutoyo() self.send_value.emit(self.value) f = open(file_path, 'a') writer = csv.writer(f, lineterminator='\n') # サイクルタイムの時間を記録 self.dt = datetime.datetime.now() self.dt1 = self.dt.strftime('%Y/%m/%d') self.dt2 = self.dt.strftime('%H:%M:%S') csvlist = [self.dt1, self.dt2, self.value] writer.writerow(csvlist) f.close() time.sleep(0.4) # thread処理+connect thread = self.qtthread = Thread() thread.send_value.connect(self.sound) thread.send_value.connect(self.lcd) thread.start() # exitが押された場合プログラム強制終了 def exit_main(self): sys.exit() if __name__ == '__main__': app = QApplication(sys.argv) #不明。実行には必ず必要 #stylesheetに関する設定 #app.setStyleSheet(style2) main_window = Main() #class Ppf()を表示 main_window.setWindowTitle("歪 アラーム Ver.0.0.1") #windowのtitle #main_window.setFixedSize(300, 200) #ソフトのサイズとサイズの固定 main_window.showMaximized() #ソフトのサイズとサイズの固定 app.exec_() #不明。実行には必ず必要

良い質問の評価を上げる

以下のような質問は評価を上げましょう

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

評価が高い質問は、TOPページの「注目」タブのフィードに表示されやすくなります。

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

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

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

teratailでは下記のような質問を「具体的に困っていることがない質問」、「サイトポリシーに違反する質問」と定義し、推奨していません。

  • プログラミングに関係のない質問
  • やってほしいことだけを記載した丸投げの質問
  • 問題・課題が含まれていない質問
  • 意図的に内容が抹消された質問
  • 過去に投稿した質問と同じ内容の質問
  • 広告と受け取られるような投稿

評価を下げると、トップページの「アクティブ」「注目」タブのフィードに表示されにくくなります。

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

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

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

ただいまの回答率
87.20%

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

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

質問する

関連した質問

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

Python

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