2016-02-10 33 views
0

我有這個GUI代碼,它由pyuic5-x參數生成。我已將一些代碼添加到Ui_LEDController,例如通過串行端口連接到arduino。我想在程序關閉時通過X實現斷開Arduino的連接。
我知道我必須重寫QMainWindow方法closeEvent(),但我不知道應該採取哪些步驟來實現此目的。我不能只創建class MyWindow(QtWidgets.QMainWindow()),然後LEDController = MyWindow(),因爲我將無法訪問串行變量。
所以基本上:我不應該使用這Ui_LEDController來設置GUI項目,而不是創建class MyWindow(QtWidgets.QMainWindow())其中我將實現所有的GUI項目並覆蓋closeEvent()從QtCreator中覆蓋PyQt中的QMainWindow方法

from PyQt5 import QtCore, QtGui, QtWidgets 

class Ui_LEDController(object): 
    def setupUi(self, LEDController): 
     LEDController.setObjectName("LEDController") 
     LEDController.resize(230, 160) 
     sizePolicy = QtWidgets.QSizePolicy(QtWidgets.QSizePolicy.Fixed, QtWidgets.QSizePolicy.Fixed) 
     sizePolicy.setHorizontalStretch(0) 
     sizePolicy.setVerticalStretch(0) 
     sizePolicy.setHeightForWidth(LEDController.sizePolicy().hasHeightForWidth()) 
     LEDController.setSizePolicy(sizePolicy) 
     LEDController.setMinimumSize(QtCore.QSize(230, 160)) 
     LEDController.setMaximumSize(QtCore.QSize(230, 160)) 
     # Lot of initializing 
     LEDController.setCentralWidget(self.central_widget) 

     self.retranslateUi(LEDController) 
     # Signals and Slots handlers 
     QtCore.QMetaObject.connectSlotsByName(LEDController) 

    def retranslateUi(self, LEDController): 
     _translate = QtCore.QCoreApplication.translate 
     LEDController.setWindowTitle(_translate("LEDController", "LEDController")) 
     self.bright_label.setText(_translate("LEDController", "Brightness")) 
     # Changing text in items 


if __name__ == "__main__": 
    import sys 
    app = QtWidgets.QApplication(sys.argv) 
    LEDController = QtWidgets.QMainWindow() 
    ui = Ui_LEDController() 
    ui.setupUi(LEDController) 
    LEDController.show() 
    sys.exit(app.exec_()) 

回答

1

您至少有兩種方式:

子類都QMainWindowUi_LEDController

class MyWindowClass(QMainWindow, Ui_LEDController): 

或子類僅QMainWindow與屬性self.ui

class MyWindowClass(QMainWindow): 
    def __init__(self): 
     ... 
     self.ui = Ui_LEDController() 
     self.ui.setupUi(self) 

,然後使用的所有變量兩個班

+0

好主意!謝謝。我使用了第二種解決方案。 :) –