2017-09-26 6 views
0

私が書いたクラスと他の人が書いたクラスを組み合わせたPythonプロジェクトをPyQT5で作成しています。 2番目のクラスは新しいウィンドウで開き、シリアル通信から読み取ったデータを表示します。 2番目のウィンドウが表示される前にプログラムを閉じると、2番目のクラスによってCOMポートが開かれ、インスタンス化が正しく閉じられないため、プログラムを再実行できないという問題があります。あまりにも早く開かないようにこのCOMポートを扱うにはどうしたらいいですか?別のクラスのCOMポートを扱う

私のコードは次のようになります。

class SecondWindow(SecondWindowClass): 

    def closeThis(self): 
     self.ser.close() 
     self.close() 
     self.first.show() 

    def __init__(self, first): 
     #SecondWindowClass.__init__(self) 

     super(SecondWindow, self).__init__() 
     self.first = first 
     self.ui = WindowTemplate() 
     self.ui.setupUi(self) 

     self.show() 

     print("Now opening COM port") 
     self.ser = serial.Serial('COM1', 9600, timeout=1) 
     print("COM1 opened") 
     #line = self.ser.readline() # first line is trash 
     self.ser.flush() 
     print("flushed COM11") 
     self.ui.pushButton.clicked.connect(lambda x:self.closeThis()) 

class MainWindow(QtGui.QMainWindow, Ui_MainWindow): 

    def showSecond(self): 
     self.second.show() 
     self.hide() 
     self.ui.end_button.clicked.connect(lambda x:self.nextPicture()) 

    def __init__(self): 
     QtGui.QMainWindow.__init__(self) 
     Ui_MainWindow.__init__(self) 
     self.setWindowTitle('pyqtgraph example: Qt Designer') 
     self.ui=uic.loadUi(uiFile, self) 
     self.setupUi(self) 

     self.show() 
     self.second = SecondWindow(self) 
     self.second.hide() 
     self.ui.end_button.clicked.connect(lambda x:self.showSecond()) 
win = MainWindow() 

if __name__ == '__main__': 
    if (sys.flags.interactive != 1) or not hasattr(QtCore, 'PYQT_VERSION'): 
     QtGui.QApplication.instance().exec_() 

答えて

0

私はcloseEventを使用して解決策を見つけた:

class MainWindow(QtGui.QMainWindow, Ui_MainWindow): 

    def closeEvent(self, evnt): # Use the closing event 
     if isinstance(self.second, SecondWindow): # Check if instance already exists 
      try: # Close port if possible 
       self.second.ser.close() 
       print("Port closed") 
      except(RuntimeError, TypeError, NameError): 
       print("no serial port") 
[...] 
関連する問題