2017-06-05 7 views
0

ちょっと、GUIウィンドウをリフレッシュしようとしていますが、何らかの理由で、すべてのループが終了するまでリフレッシュしません。私は他の記事を読んで解決策を試しましたが、彼らは助けをくれませんでした。誰かが私が間違っていたこと、または私が追加すべきことを見つけられますか?コードは以下の通りで、jsonファイルから特定の値を読み取り、GUIテーブルに格納します。私はPyQt4とPython 2.7を使用しています。前もって感謝します。Refreshing PyQt4 window

import sys 
from PyQt4 import QtCore, QtGui 
import time 
from PyQt4.QtGui import QApplication 
import json 
import threading 

from GUI_Window import * 
LastCommandTime=0 

class MyForm(QtGui.QMainWindow): 
    def __init__(self, parent=None): 
     QtGui.QWidget.__init__(self, parent) 
     self.ui = Ui_MainWindow() 
     self.ui.setupUi(self) 
     self.ui.button.clicked.connect(self.DataCollection) 
    def DataCollection(self): 
     print "button clicked" 
     task1=threading.Thread(target=self.DisplayCommand) 
     task1.start() 
     task2=threading.Thread(target=self.DisplayTemp) 
     task2.start() 
     task1.join() 
     task2.join() 
    def DisplayCommand(self): 
     start=time.time() 
     with open("20170602153617003.log") as f: 
     for line in f: 
      data = [] 
      data=json.loads(line) 
      try: 
       if data['TYPE']== "    cmd": 
        command= data["command"] 
        print "1" 
        self.ui.command_table.setItem(0,0, QtGui.QTableWidgetItem(command["cmd_name"])) 
        self.ui.command_table.setItem(0,1, QtGui.QTableWidgetItem(command["opcode"])) 
        self.ui.command_table.setItem(0,2, QtGui.QTableWidgetItem("".join((str(x)+',') for x in command["param_type_list"]))) 
        self.ui.command_table.setItem(0,3, QtGui.QTableWidgetItem("".join((str(x)+',') for x in command["param_val_list"]))) 
        self.ui.commands_time.display((time.time()-start)) 
        start=time.time() 
        time.sleep(1) 
       if data['TYPE']== "  cmd_reply": 
        command= data["response"] 
        self.ui.reply_table.setItem(0,0, QtGui.QTableWidgetItem(data["cmd_name"].replace(" ",""))) 
        self.ui.reply_table.setItem(0,1, QtGui.QTableWidgetItem("0x%02x"%command["opcode"])) 
        self.ui.reply_table.setItem(0,2, QtGui.QTableWidgetItem(str(command["error_control_type"]))) 
        self.ui.reply_table.setItem(0,3, QtGui.QTableWidgetItem(str(command["data_present"]))) 
        self.ui.reply_table.setItem(0,4, QtGui.QTableWidgetItem(str(command["command_reply"]))) 
        self.ui.reply_table.setItem(0,5, QtGui.QTableWidgetItem(str(command["status_flags"]))) 
        self.ui.reply_table.setItem(0,6, QtGui.QTableWidgetItem(str(command["condition_code"]))) 
        self.ui.reply_table.setItem(0,7, QtGui.QTableWidgetItem(str(command["data_length"]))) 
        self.ui.reply_table.setItem(0,8, QtGui.QTableWidgetItem(str(command["data"]))) 
        self.ui.reply_table.setItem(0,9, QtGui.QTableWidgetItem(str(command["error_control"]))) 
        flags=command['flags'] 
        self.ui.replyflg_table.setItem(0,0, QtGui.QTableWidgetItem(str(flags["BOOT_FAIL"]))) 
        self.ui.replyflg_table.setItem(0,1, QtGui.QTableWidgetItem(str(flags["BOOT_SOURCE"]))) 
        self.ui.replyflg_table.setItem(0,2, QtGui.QTableWidgetItem(str(flags["COMM_SIDE"]))) 
        self.ui.replyflg_table.setItem(0,3, QtGui.QTableWidgetItem(str(flags["SELF_TEST_FAIL"]))) 
        self.ui.replyflg_table.setItem(0,4, QtGui.QTableWidgetItem(str(flags["STA_ERROR"]))) 
        self.ui.replyflg_table.setItem(0,5, QtGui.QTableWidgetItem(str(flags["SPECTROMETER_ERROR"]))) 
        self.ui.replyflg_table.setItem(0,6, QtGui.QTableWidgetItem(str(flags["SCCD_READY"]))) 
        self.ui.replyflg_table.setItem(0,7, QtGui.QTableWidgetItem(str(flags["SCANNER_ON"]))) 
        self.ui.replyflg_table.setItem(0,8, QtGui.QTableWidgetItem(str(flags["SCANNER_COMM_ERROR"]))) 
        self.ui.replyflg_table.setItem(0,9, QtGui.QTableWidgetItem(str(flags["SCANNER_HOME_ERROR"]))) 
        self.ui.replyflg_table.setItem(0,10, QtGui.QTableWidgetItem(str(flags["ERROR_LOG_NOT_EMPTY"]))) 
        self.ui.replyflg_table.setItem(0,11, QtGui.QTableWidgetItem(str(flags["SEND_EVR"]))) 
        self.ui.replyflg_table.setItem(0,12, QtGui.QTableWidgetItem(str(flags["SYS_ERROR"]))) 
        self.ui.replyflg_table.setItem(0,13, QtGui.QTableWidgetItem(str(flags["UNDEFINED0"]))) 
        self.ui.replyflg_table.setItem(0,14, QtGui.QTableWidgetItem(str(flags["UNDEFINED1"]))) 
       time.sleep(.1) 
      except KeyError: 
       time.sleep(.1) 
       pass 
      QApplication.processEvents() 

    def DisplayTemp(self): 
     i=0 
     while i<10: 
      print "hi" 
      self.ui.flt_table.setItem(0,0, QtGui.QTableWidgetItem(str(i))) 
      i=i+1 
      QApplication.processEvents() 
      time.sleep(.2) 




if __name__ == "__main__": 
    app = QtGui.QApplication(sys.argv) 
    myapp = MyForm() 
    graphTimer = QtCore.QTimer() 
    graphTimer.timeout.connect(app.processEvents) 
    graphTimer.start(0.1) 
    myapp.show() 
    sys.exit(app.exec_()) 

また、私がDisplayTemp()をコメントアウトすると、うまくいきます。私は糸の数が問題を引き起こしているかもしれないと考えていたが、それを修正する方法がわからない。

+0

QApplicationを持つと、sem.release()の前にprocessEvents()がオプションであった場合に役立ちません。 –

+0

また、あなたはセマフォをどこで取得しますか? –

+0

わかりません。それはちょうど私がそれを取得していた場所を設定し、その部分を取ることは、より良い仕事をするように見える問題を引き起こした –

答えて

0

明らかに、.joinコマンドが原因です。彼らはブロックしているように見えるので、GUIはあるレベルでは爽やかになりません。私はこれが将来誰かを助けてくれることを願っています。