1
  1. 最初は機能しましたが、データの処理をループする関数が再呼び出しされたときは機能しませんでした。私は2つのpythonプログラムを持っています。メインは進行状況バーを表示し、2 番目はデータの処理をループします。私はstackoverflowとgoogle全体を調査し、解決策を見つけるために一生懸命努力しました。最も近い解決策は、「QProgressBar が読み込みを完了した後の原因不明の遅延 2」という質問でしたが、私の問題には適用できません。QApplication.processEvents() も適用しようとしましたが、成功しませんでした。

    メインプログラム…etc…

    def connectDevice(self)
      if self.usb_serial != None:
        self.ui.ProgressBar.setMinimum(0)  # settings for showing pyqt4 progress bar            
        self.ui.ProgressBar.setMaximum(0)  # not indicating as expected          
        self.ui.ProgressBar.setValue(0)    # first showing 0%
        self.device = ScopeDev(self.usb_serial)   # device.py my second Python program
        self.device.start()                       # Connect Call... class ScopeDev/def run(self):
        self.device.init_received.connect(self.init_received)     # end of data processing signal received
      else:
        self.Display_MSG("Connection Error", "device not plug into USB port." )
    
    def reprocessdata(self):
      logging.info("Re-Processing Data...")
      self.ui.ProgressBar.setMaximum(0)     # hoping to kick off the progress bar again. Not even showing 0% 
      self.ui.ProgressBar.setValue(0)       # I tried insert QApplication.processEvents() here but did not work
      self.device.init()                    # Call class ScopeDev/def init(self): data was being processed
    
    def init_received(self):
      logging.debug("Init received")
      self.ui.ProgressBar.setMaximum(1)         # indicated 100% on both times, when data processing completed
      self.ui.ProgressBar.setValue(1)           # first from connectDevice and second time from reprocessdata
    
  2. 私の2番目のpythonプログラム...など...

    class ScopeDev (QtCore.QThread):
      init_received = QtCore.pyqtSignal()
    
    def __init__(self, usb_serial, usb_serial_baud=9600, timeout=2):
      QtCore.QThread.__init__(self, None)
      self.serial = serial.Serial(usb_serial, usb_serial_baud, timeout=timeout)   # connect to Arduino
      logging.debug("Connected (%s)" % usb_serial)
    
    def run(self):
      self.init()                    #1 Call...def init(self):
    
    def init(self):
      self.serial.readline().rstrip()            # read println put out by Arduino/plaser.ino
      self.serial.write(b'init')                    
      self.sread(expect=b'^done_init$')
    
    def sread(self, expect=b'^cmd$'):   # loops around to process data from Arduino...etc. when completed...
      self.init_received.emit()       # emits the outbound signal back to the main
    
4

1 に答える 1