class Ui_MainWindow(object): db = Database() cam = Camera(0) camTimer = QtCore.QTimer() tempTimer = QtCore.QTimer() cam.setDaemon(True) holes = NetHoleDetection() clean = NetCleaning() def setupUi(self, MainWindow): MainWindow.setObjectName("MainWindow") MainWindow.resize(1002, 872) MainWindow.setWindowFlags(QtCore.Qt.CustomizeWindowHint) MainWindow.setWindowFlags(QtCore.Qt.FramelessWindowHint) MainWindow.setObjectName("MainWindow") MainWindow.resize(999, 872) self.centralwidget = QtWidgets.QWidget(MainWindow) self.centralwidget.setObjectName("centralwidget") self.stackedWidget = QtWidgets.QStackedWidget(self.centralwidget) self.stackedWidget.setGeometry(QtCore.QRect(0, 0, 1000, 873)) self.stackedWidget.setObjectName("stackedWidget") self.loginPage = QtWidgets.QWidget() self.loginPage.setStyleSheet( "border-image: url(:/Images/Resources/signInBG.png);") self.loginPage.setObjectName("loginPage") self.button_signIn_signIn = QtWidgets.QPushButton(self.loginPage) self.button_signIn_signIn.setGeometry(QtCore.QRect(320, 590, 320, 45)) self.button_signIn_signIn.setStyleSheet( "QPushButton{\n" " border-image: url(:/Images/Resources/signIn.png);\n" "background-repeat: none;\n" "}\n" "\n" "QPushButton:hover{\n" " border-image: url(:/Images/Resources/signInPressed.png);\n" "}\n" "\n" "QPushButton:pressed{\n" " border-image: url(:/Images/Resources/signInPressed.png);\n" "}") self.button_signIn_signIn.setText("") self.button_signIn_signIn.setObjectName("button_signIn_signIn") self.button_faceID_signIn = QtWidgets.QPushButton(self.loginPage) self.button_faceID_signIn.setGeometry(QtCore.QRect(320, 660, 320, 45)) self.button_faceID_signIn.setStyleSheet( "QPushButton{\n" " border-image: url(:/Images/Resources/faceID.png);\n" "background-repeat: none;\n" "}\n" "\n" "QPushButton:hover{\n" " border-image: url(:/Images/Resources/faceIDClicked.png);\n" "}\n" "\n" "QPushButton:pressed{\n" " border-image: url(:/Images/Resources/faceIDClicked.png);\n" "}") self.button_faceID_signIn.setText("") self.button_faceID_signIn.setObjectName("button_faceID_signIn") self.button_signUp_signIn = QtWidgets.QPushButton(self.loginPage) self.button_signUp_signIn.setGeometry(QtCore.QRect(320, 730, 320, 45)) self.button_signUp_signIn.setStyleSheet( "QPushButton{\n" " border-image: url(:/Images/Resources/signUp.png);\n" "background-repeat: none;\n" "}\n" "\n" "QPushButton:hover{\n" " border-image: url(:/Images/Resources/signUpPressed.png);\n" "}\n" "\n" "QPushButton:pressed{\n" " border-image: url(:/Images/Resources/signUpPressed.png);\n" "}") self.button_signUp_signIn.setText("") self.button_signUp_signIn.setObjectName("button_signUp_signIn") self.lineEdit_username_signIn = QtWidgets.QLineEdit(self.loginPage) self.lineEdit_username_signIn.setGeometry( QtCore.QRect(310, 345, 281, 31)) self.lineEdit_username_signIn.setStyleSheet( "border-image: url(:/Images/Resources/darkBlackBG.png);\n" "color: rgb(167, 167, 167);") self.lineEdit_username_signIn.setObjectName("lineEdit_username_signIn") self.lineEdit_password_signIn = QtWidgets.QLineEdit(self.loginPage) self.lineEdit_password_signIn.setGeometry( QtCore.QRect(310, 419, 281, 41)) self.lineEdit_password_signIn.setContextMenuPolicy( QtCore.Qt.DefaultContextMenu) self.lineEdit_password_signIn.setStyleSheet( "border-image: url(:/Images/Resources/darkBlackBG.png);\n" "color: rgb(167, 167, 167);\n" "") self.lineEdit_password_signIn.setEchoMode(QtWidgets.QLineEdit.Password) self.lineEdit_password_signIn.setObjectName("lineEdit_password_signIn") self.button_close = QtWidgets.QPushButton(self.loginPage) self.button_close.setGeometry(QtCore.QRect(940, 40, 21, 21)) self.button_close.setStyleSheet( "QPushButton{\n" " border-image: url(:/Images/Resources/exitBlue.png);\n" "background-repeat: none;\n" "}\n" "\n" "QPushButton:hover{\n" " border-image: url(:/Images/Resources/exitRed.png);\n" "}\n" "\n" "QPushButton:pressed{\n" " border-image: url(:/Images/Resources/exitRed.png);\n" "}") self.button_close.setText("") self.button_close.setObjectName("button_close") self.label_invalid = QtWidgets.QLabel(self.loginPage) self.label_invalid.setGeometry(QtCore.QRect(400, 300, 201, 16)) self.label_invalid.setStyleSheet( "border-image: url(:/Images/Resources/semiDarkBG.png);\n" "color: rgb(255, 61, 55);") self.label_invalid.setText("") self.label_invalid.setObjectName("label_invalid") self.stackedWidget.addWidget(self.loginPage) self.signupPage = QtWidgets.QWidget() self.signupPage.setStyleSheet( "border-image: url(:/Images/Resources/signUpBG.png);") self.signupPage.setObjectName("signupPage") self.lineEdit_firstName_signUp = QtWidgets.QLineEdit(self.signupPage) self.lineEdit_firstName_signUp.setGeometry( QtCore.QRect(310, 330, 151, 29)) self.lineEdit_firstName_signUp.setStyleSheet( "border-image: url(:/Images/Resources/darkBlackBG.png);\n" "color: rgb(167, 167, 167);") self.lineEdit_firstName_signUp.setObjectName( "lineEdit_firstName_signUp") self.lineEdit_lastName_signUp = QtWidgets.QLineEdit(self.signupPage) self.lineEdit_lastName_signUp.setGeometry( QtCore.QRect(530, 330, 151, 29)) self.lineEdit_lastName_signUp.setStyleSheet( "border-image: url(:/Images/Resources/darkBlackBG.png);\n" "color: rgb(167, 167, 167);") self.lineEdit_lastName_signUp.setObjectName("lineEdit_lastName_signUp") self.lineEdit_email_signUp = QtWidgets.QLineEdit(self.signupPage) self.lineEdit_email_signUp.setGeometry(QtCore.QRect(310, 408, 371, 21)) self.lineEdit_email_signUp.setStyleSheet( "border-image: url(:/Images/Resources/darkBlackBG.png);\n" "color: rgb(167, 167, 167);") self.lineEdit_email_signUp.setObjectName("lineEdit_email_signUp") self.lineEdit_username_signUp = QtWidgets.QLineEdit(self.signupPage) self.lineEdit_username_signUp.setGeometry( QtCore.QRect(310, 490, 371, 21)) self.lineEdit_username_signUp.setStyleSheet( "border-image: url(:/Images/Resources/darkBlackBG.png);\n" "color: rgb(167, 167, 167);") self.lineEdit_username_signUp.setObjectName("lineEdit_username_signUp") self.lineEdit_password_signUp = QtWidgets.QLineEdit(self.signupPage) self.lineEdit_password_signUp.setGeometry( QtCore.QRect(310, 570, 371, 21)) self.lineEdit_password_signUp.setStyleSheet( "border-image: url(:/Images/Resources/darkBlackBG.png);\n" "color: rgb(167, 167, 167);") self.lineEdit_password_signUp.setObjectName("lineEdit_password_signUp") self.button_signUp_signUp = QtWidgets.QPushButton(self.signupPage) self.button_signUp_signUp.setGeometry(QtCore.QRect(340, 640, 320, 45)) self.button_signUp_signUp.setStyleSheet( "QPushButton{\n" " border-image: url(:/Images/Resources/signUp.png);\n" "background-repeat: none;\n" "}\n" "\n" "QPushButton:hover{\n" " border-image: url(:/Images/Resources/signUpPressed.png);\n" "}\n" "\n" "QPushButton:pressed{\n" " border-image: url(:/Images/Resources/signUpPressed.png);\n" "}") self.button_signUp_signUp.setText("") self.button_signUp_signUp.setObjectName("button_signUp_signUp") self.button_backToSignIn = QtWidgets.QPushButton(self.signupPage) self.button_backToSignIn.setGeometry(QtCore.QRect(340, 720, 320, 45)) self.button_backToSignIn.setStyleSheet( "QPushButton{\n" " border-image: url(:/Images/Resources/backSignInPressed.png);\n" "background-repeat: none;\n" "}\n" "\n" "QPushButton:hover{\n" " border-image: url(:/Images/Resources/backSignIn.png);\n" "}\n" "\n" "QPushButton:pressed{\n" " border-image: url(:/Images/Resources/backSignIn.png);\n" "}") self.button_backToSignIn.setText("") self.button_backToSignIn.setObjectName("button_backToSignIn") self.button_close_2 = QtWidgets.QPushButton(self.signupPage) self.button_close_2.setGeometry(QtCore.QRect(940, 40, 21, 21)) self.button_close_2.setStyleSheet( "QPushButton{\n" " border-image: url(:/Images/Resources/exitBlue.png);\n" "background-repeat: none;\n" "}\n" "\n" "QPushButton:hover{\n" " border-image: url(:/Images/Resources/exitRed.png);\n" "}\n" "\n" "QPushButton:pressed{\n" " border-image: url(:/Images/Resources/exitRed.png);\n" "}") self.button_close_2.setText("") self.button_close_2.setObjectName("button_close_2") self.stackedWidget.addWidget(self.signupPage) self.faceidPage = QtWidgets.QWidget() self.faceidPage.setStyleSheet( "border-image: url(:/Images/Resources/faceIDWidget.png);") self.faceidPage.setObjectName("faceidPage") self.label_cam = QtWidgets.QLabel(self.faceidPage) self.label_cam.setGeometry(QtCore.QRect(90, 230, 821, 401)) self.label_cam.setStyleSheet( "border-image: url(:/Images/Resources/semiDarkBG.png);") self.label_cam.setText("") self.label_cam.setObjectName("label_cam") self.stackedWidget.addWidget(self.faceidPage) self.mainPage = QtWidgets.QWidget() self.mainPage.setStyleSheet( "border-image: url(:/Images/Resources/mainWidgetBG.png);") self.mainPage.setObjectName("mainPage") self.button_dashboard = QtWidgets.QPushButton(self.mainPage) self.button_dashboard.setGeometry(QtCore.QRect(0, 230, 291, 54)) self.button_dashboard.setStyleSheet( "QPushButton{\n" " border-image: url(:/Images/Resources/dasboard.png);\n" "background-repeat: none;\n" "}\n" "\n" "QPushButton:hover{\n" " border-image: url(:/Images/Resources/dashboardPressed.png);\n" "}\n" "\n" "QPushButton:pressed{\n" " border-image: url(:/Images/Resources/dashboardPressed.png);\n" "}") self.button_dashboard.setText("") self.button_dashboard.setObjectName("button_dashboard") self.button_createTank = QtWidgets.QPushButton(self.mainPage) self.button_createTank.setGeometry(QtCore.QRect(0, 290, 291, 54)) self.button_createTank.setStyleSheet( "QPushButton{\n" " border-image: url(:/Images/Resources/create.png);\n" "background-repeat: none;\n" "}\n" "\n" "QPushButton:hover{\n" " border-image: url(:/Images/Resources/createPressed.png);\n" "}\n" "\n" "QPushButton:pressed{\n" " border-image: url(:/Images/Resources/createPressed.png);\n" "}") self.button_createTank.setText("") self.button_createTank.setObjectName("button_createTank") self.button_analyzeTank = QtWidgets.QPushButton(self.mainPage) self.button_analyzeTank.setGeometry(QtCore.QRect(0, 350, 291, 54)) self.button_analyzeTank.setStyleSheet( "QPushButton{\n" " border-image: url(:/Images/Resources/analyze.png);\n" "background-repeat: none;\n" "}\n" "\n" "QPushButton:hover{\n" " border-image: url(:/Images/Resources/analyzePressed.png);\n" "}\n" "\n" "QPushButton:pressed{\n" " border-image: url(:/Images/Resources/analyzePressed.png);\n" "}") self.button_analyzeTank.setText("") self.button_analyzeTank.setObjectName("button_analyzeTank") self.button_settings = QtWidgets.QPushButton(self.mainPage) self.button_settings.setGeometry(QtCore.QRect(0, 410, 291, 54)) self.button_settings.setStyleSheet( "QPushButton{\n" " border-image: url(:/Images/Resources/settings.png);\n" "background-repeat: none;\n" "}\n" "\n" "QPushButton:hover{\n" " border-image: url(:/Images/Resources/settingsPressed.png);\n" "}\n" "\n" "QPushButton:pressed{\n" " border-image: url(:/Images/Resources/settingsPressed.png);\n" "}") self.button_settings.setText("") self.button_settings.setObjectName("button_settings") self.button_logout = QtWidgets.QPushButton(self.mainPage) self.button_logout.setGeometry(QtCore.QRect(78, 790, 130, 42)) self.button_logout.setStyleSheet( "QPushButton{\n" " border-image: url(:/Images/Resources/logoutPressed.png);\n" "background-repeat: none;\n" "}\n" "\n" "QPushButton:hover{\n" " border-image: url(:/Images/Resources/logout.png);\n" "}\n" "\n" "QPushButton:pressed{\n" " border-image: url(:/Images/Resources/logout.png);\n" "}") self.button_logout.setText("") self.button_logout.setObjectName("button_logout") self.stackedWidget_2 = QtWidgets.QStackedWidget(self.mainPage) self.stackedWidget_2.setGeometry(QtCore.QRect(290, 0, 711, 861)) self.stackedWidget_2.setStyleSheet( "border-image: url(:/Images/Resources/CreateBG.png);") self.stackedWidget_2.setObjectName("stackedWidget_2") self.dashboardPage = QtWidgets.QWidget() self.dashboardPage.setStyleSheet( "border-image: url(:/Images/Resources/dashboardWidget.png);") self.dashboardPage.setObjectName("dashboardPage") self.label_fishType_tankData = QtWidgets.QLabel(self.dashboardPage) self.label_fishType_tankData.setGeometry(QtCore.QRect( 190, 176, 81, 16)) self.label_fishType_tankData.setStyleSheet( "border-image: url(:/Images/Resources/whiteBG.png);\n" "font: 11pt \"Helvetica LT Std\";") self.label_fishType_tankData.setObjectName("label_fishType_tankData") self.label_harvestDate_tankData = QtWidgets.QLabel(self.dashboardPage) self.label_harvestDate_tankData.setGeometry( QtCore.QRect(220, 225, 111, 16)) self.label_harvestDate_tankData.setStyleSheet( "border-image: url(:/Images/Resources/whiteBG.png);\n" "font: 11pt \"Helvetica LT Std\";") self.label_harvestDate_tankData.setObjectName( "label_harvestDate_tankData") self.label_feeding_tankData = QtWidgets.QLabel(self.dashboardPage) self.label_feeding_tankData.setGeometry(QtCore.QRect( 250, 273, 101, 16)) self.label_feeding_tankData.setStyleSheet( "border-image: url(:/Images/Resources/whiteBG.png);\n" "font: 11pt \"Helvetica LT Std\";") self.label_feeding_tankData.setObjectName("label_feeding_tankData") self.label_ph_tankData = QtWidgets.QLabel(self.dashboardPage) self.label_ph_tankData.setGeometry(QtCore.QRect(140, 324, 71, 16)) self.label_ph_tankData.setStyleSheet( "border-image: url(:/Images/Resources/whiteBG.png);\n" "font: 11pt \"Helvetica LT Std\";") self.label_ph_tankData.setObjectName("label_ph_tankData") self.label_temperature_tankData = QtWidgets.QLabel(self.dashboardPage) self.label_temperature_tankData.setGeometry( QtCore.QRect(210, 370, 500, 20)) self.label_temperature_tankData.setStyleSheet( "border-image: url(:/Images/Resources/whiteBG.png);\n" "color: rgb(255, 61, 55);\n" "font: 11pt \"Helvetica LT Std\";") self.label_temperature_tankData.setObjectName( "label_temperature_tankData") self.label_fishNetHoles_tankData = QtWidgets.QLabel(self.dashboardPage) self.label_fishNetHoles_tankData.setGeometry( QtCore.QRect(220, 418, 71, 16)) self.label_fishNetHoles_tankData.setStyleSheet( "border-image: url(:/Images/Resources/whiteBG.png);\n" "font: 11pt \"Helvetica LT Std\";") self.label_fishNetHoles_tankData.setObjectName( "label_fishNetHoles_tankData") self.label_fishnetNeedsCleaning_tankData = QtWidgets.QLabel( self.dashboardPage) self.label_fishnetNeedsCleaning_tankData.setGeometry( QtCore.QRect(290, 465, 55, 16)) self.label_fishnetNeedsCleaning_tankData.setStyleSheet( "border-image: url(:/Images/Resources/whiteBG.png);\n" "font: 11pt \"Helvetica LT Std\";") self.label_fishnetNeedsCleaning_tankData.setObjectName( "label_fishnetNeedsCleaning_tankData") self.label_pipesNeedChanging_tankData = QtWidgets.QLabel( self.dashboardPage) self.label_pipesNeedChanging_tankData.setGeometry( QtCore.QRect(280, 513, 55, 16)) self.label_pipesNeedChanging_tankData.setStyleSheet( "border-image: url(:/Images/Resources/whiteBG.png);\n" "font: 11pt \"Helvetica LT Std\";") self.label_pipesNeedChanging_tankData.setObjectName( "label_pipesNeedChanging_tankData") self.comboBox = QtWidgets.QComboBox(self.dashboardPage) self.comboBox.setGeometry(QtCore.QRect(300, 70, 128, 33)) self.comboBox.setStyleSheet( "QComboBox {\n" "border-image: url(:/Resources/comboBoxBG.png);\n" " border-image: url(:/Images/Resources/comboBoxBG.png);\n" " color: black;\n" " font: 14px;\n" " padding: 1px 0px 1px 3px; /* This (useless) line resolves a bug with the font color */\n" "}\n" "\n" "QComboBox:focus {\n" " color: red;\n" "}\n" "\n" "QComboBox::drop-down \n" "{\n" " border: 0px; /* This seems to replace the whole arrow of the combo box */\n" "}") self.comboBox.setObjectName("comboBox") self.comboBox.addItem("") self.button_email = QtWidgets.QPushButton(self.dashboardPage) self.button_email.setGeometry(QtCore.QRect(220, 810, 127, 33)) self.button_email.setStyleSheet( "QPushButton{\n" " border-image: url(:/Images/Resources/EmailButton.png);\n" "background-repeat: none;\n" "}\n" "\n" "QPushButton:hover{\n" " border-image: url(:/Images/Resources/EmailButtonPressed.png);\n" "}\n" "\n" "QPushButton:pressed{\n" " border-image: url(:/Images/Resources/EmailButtonPressed.png);\n" "}") self.button_email.setText("") self.button_email.setObjectName("button_email") self.button_report = QtWidgets.QPushButton(self.dashboardPage) self.button_report.setGeometry(QtCore.QRect(370, 810, 127, 33)) self.button_report.setStyleSheet( "QPushButton{\n" " border-image: url(:/Images/Resources/report.png);\n" "background-repeat: none;\n" "}\n" "\n" "QPushButton:hover{\n" " border-image: url(:/Images/Resources/reportPressed.png);\n" "}\n" "\n" "QPushButton:pressed{\n" " border-image: url(:/Images/Resources/reportPressed.png);\n" "}") self.button_report.setText("") self.button_report.setObjectName("button_report") self.button_close_3 = QtWidgets.QPushButton(self.dashboardPage) self.button_close_3.setGeometry(QtCore.QRect(670, 40, 21, 21)) self.button_close_3.setStyleSheet( "QPushButton{\n" " border-image: url(:/Images/Resources/exitBlue.png);\n" "background-repeat: none;\n" "}\n" "\n" "QPushButton:hover{\n" " border-image: url(:/Images/Resources/exitGrey.png);\n" "}\n" "\n" "QPushButton:pressed{\n" " border-image: url(:/Images/Resources/exitGrey.png);\n" "}") self.button_close_3.setText("") self.button_close_3.setObjectName("button_close_3") self.stackedWidget_2.addWidget(self.dashboardPage) self.createtankPage = QtWidgets.QWidget() self.createtankPage.setObjectName("createtankPage") self.lineEdit_fishType_createTank = QtWidgets.QLineEdit( self.createtankPage) self.lineEdit_fishType_createTank.setGeometry( QtCore.QRect(480, 490, 71, 31)) self.lineEdit_fishType_createTank.setStyleSheet( "border-image: url(:/Images/Resources/darkBlackBG.png);\n" "color: rgb(167, 167, 167);") self.lineEdit_fishType_createTank.setObjectName( "lineEdit_fishType_createTank") self.lineEdit_date_createTank = QtWidgets.QLineEdit( self.createtankPage) self.lineEdit_date_createTank.setGeometry( QtCore.QRect(480, 540, 101, 22)) self.lineEdit_date_createTank.setStyleSheet( "border-image: url(:/Images/Resources/darkBlackBG.png);\n" "color: rgb(167, 167, 167);") self.lineEdit_date_createTank.setObjectName("lineEdit_date_createTank") self.lineEdit_feeding_createTank = QtWidgets.QLineEdit( self.createtankPage) self.lineEdit_feeding_createTank.setGeometry( QtCore.QRect(480, 590, 61, 22)) self.lineEdit_feeding_createTank.setStyleSheet( "border-image: url(:/Images/Resources/darkBlackBG.png);\n" "color: rgb(167, 167, 167);") self.lineEdit_feeding_createTank.setObjectName( "lineEdit_feeding_createTank") self.lineEdit_lowerTemperatureThreshold_createTank = QtWidgets.QLineEdit( self.createtankPage) self.lineEdit_lowerTemperatureThreshold_createTank.setGeometry( QtCore.QRect(480, 640, 81, 22)) self.lineEdit_lowerTemperatureThreshold_createTank.setStyleSheet( "border-image: url(:/Images/Resources/darkBlackBG.png);\n" "color: rgb(167, 167, 167);") self.lineEdit_lowerTemperatureThreshold_createTank.setObjectName( "lineEdit_lowerTemperatureThreshold_createTank") self.lineEdit_upperTemperatureThreshold_createTank = QtWidgets.QLineEdit( self.createtankPage) self.lineEdit_upperTemperatureThreshold_createTank.setGeometry( QtCore.QRect(480, 690, 81, 22)) self.lineEdit_upperTemperatureThreshold_createTank.setStyleSheet( "border-image: url(:/Images/Resources/darkBlackBG.png);\n" "color: rgb(167, 167, 167);") self.lineEdit_upperTemperatureThreshold_createTank.setObjectName( "lineEdit_upperTemperatureThreshold_createTank") self.lineEdit_waterQualityThreshold_createTank = QtWidgets.QLineEdit( self.createtankPage) self.lineEdit_waterQualityThreshold_createTank.setGeometry( QtCore.QRect(480, 740, 81, 22)) self.lineEdit_waterQualityThreshold_createTank.setStyleSheet( "border-image: url(:/Images/Resources/darkBlackBG.png);\n" "color: rgb(167, 167, 167);") self.lineEdit_waterQualityThreshold_createTank.setObjectName( "lineEdit_waterQualityThreshold_createTank") self.button_create_createTank = QtWidgets.QPushButton( self.createtankPage) self.button_create_createTank.setGeometry( QtCore.QRect(290, 810, 127, 33)) self.button_create_createTank.setStyleSheet( "border-image: url(:/Images/Resources/createButton.png);") self.button_create_createTank.setText("") self.button_create_createTank.setObjectName("button_create_createTank") self.button_close_4 = QtWidgets.QPushButton(self.createtankPage) self.button_close_4.setGeometry(QtCore.QRect(670, 40, 21, 21)) self.button_close_4.setStyleSheet( "QPushButton{\n" " border-image: url(:/Images/Resources/exitWhiteBlue.png);\n" "background-repeat: none;\n" "}\n" "\n" "QPushButton:hover{\n" " border-image: url(:/Images/Resources/exitRed.png);\n" "}\n" "\n" "QPushButton:pressed{\n" " border-image: url(:/Images/Resources/exitRed.png);\n" "}") self.button_close_4.setText("") self.button_close_4.setObjectName("button_close_4") self.stackedWidget_2.addWidget(self.createtankPage) self.analyzetankPage = QtWidgets.QWidget() self.analyzetankPage.setStyleSheet( "border-image: url(:/Images/Resources/AnalyzeBG.png);") self.analyzetankPage.setObjectName("analyzetankPage") self.button_holes_analyzeTank = QtWidgets.QPushButton( self.analyzetankPage) self.button_holes_analyzeTank.setGeometry( QtCore.QRect(150, 530, 127, 33)) self.button_holes_analyzeTank.setStyleSheet( "QPushButton{\n" " border-image: url(:/Images/Resources/Holes.png);\n" "background-repeat: none;\n" "}\n" "\n" "QPushButton:hover{\n" " border-image: url(:/Images/Resources/HolesPressed.png);\n" "}\n" "\n" "QPushButton:pressed{\n" " border-image: url(:/Images/Resources/HolesPressed.png);\n" "}") self.button_holes_analyzeTank.setText("") self.button_holes_analyzeTank.setObjectName("button_holes_analyzeTank") self.button_cleaning_analyzeTank = QtWidgets.QPushButton( self.analyzetankPage) self.button_cleaning_analyzeTank.setGeometry( QtCore.QRect(300, 530, 127, 33)) self.button_cleaning_analyzeTank.setStyleSheet( "QPushButton{\n" " border-image: url(:/Images/Resources/Cleaning.png);\n" "background-repeat: none;\n" "}\n" "\n" "QPushButton:hover{\n" " border-image: url(:/Images/Resources/CleaningPressed.png);\n" "}\n" "\n" "QPushButton:pressed{\n" " border-image: url(:/Images/Resources/CleaningPressed.png);\n" "}") self.button_cleaning_analyzeTank.setText("") self.button_cleaning_analyzeTank.setObjectName( "button_cleaning_analyzeTank") self.button_pipes_analyzeTank = QtWidgets.QPushButton( self.analyzetankPage) self.button_pipes_analyzeTank.setGeometry( QtCore.QRect(450, 530, 127, 33)) self.button_pipes_analyzeTank.setStyleSheet( "QPushButton{\n" " border-image: url(:/Images/Resources/Pipes.png);\n" "background-repeat: none;\n" "}\n" "\n" "QPushButton:hover{\n" " border-image: url(:/Images/Resources/PipesPressed.png);\n" "}\n" "\n" "QPushButton:pressed{\n" " border-image: url(:/Images/Resources/PipesPressed.png);\n" "}") self.button_pipes_analyzeTank.setText("") self.button_pipes_analyzeTank.setObjectName("button_pipes_analyzeTank") self.button_predict_analyzeTank = QtWidgets.QPushButton( self.analyzetankPage) self.button_predict_analyzeTank.setGeometry( QtCore.QRect(440, 740, 222, 34)) self.button_predict_analyzeTank.setStyleSheet( "QPushButton{\n" " border-image: url(:/Images/Resources/predict.png);\n" "background-repeat: none;\n" "}\n" "\n" "QPushButton:hover{\n" " border-image: url(:/Images/Resources/predictPressed.png);\n" "}\n" "\n" "QPushButton:pressed{\n" " border-image: url(:/Images/Resources/predictPressed.png);\n" "}") self.button_predict_analyzeTank.setText("") self.button_predict_analyzeTank.setObjectName( "button_predict_analyzeTank") self.label_fishnetNeedsPatching_analyzeTank = QtWidgets.QLabel( self.analyzetankPage) self.label_fishnetNeedsPatching_analyzeTank.setGeometry( QtCore.QRect(300, 613, 55, 16)) self.label_fishnetNeedsPatching_analyzeTank.setStyleSheet( "border-image: url(:/Images/Resources/whiteBG.png);\n" "font: 11pt \"Helvetica LT Std\";") self.label_fishnetNeedsPatching_analyzeTank.setObjectName( "label_fishnetNeedsPatching_analyzeTank") self.label_fishnetNeedsCleaning_analyzeTank = QtWidgets.QLabel( self.analyzetankPage) self.label_fishnetNeedsCleaning_analyzeTank.setGeometry( QtCore.QRect(300, 655, 55, 16)) self.label_fishnetNeedsCleaning_analyzeTank.setStyleSheet( "border-image: url(:/Images/Resources/whiteBG.png);\n" "font: 11pt \"Helvetica LT Std\";") self.label_fishnetNeedsCleaning_analyzeTank.setObjectName( "label_fishnetNeedsCleaning_analyzeTank") self.label_pipesNeedChanging_analyzeTank = QtWidgets.QLabel( self.analyzetankPage) self.label_pipesNeedChanging_analyzeTank.setGeometry( QtCore.QRect(300, 705, 55, 16)) self.label_pipesNeedChanging_analyzeTank.setStyleSheet( "border-image: url(:/Images/Resources/whiteBG.png);\n" "font: 11pt \"Helvetica LT Std\";") self.label_pipesNeedChanging_analyzeTank.setObjectName( "label_pipesNeedChanging_analyzeTank") self.lineEdit_temperature_analyzeTank = QtWidgets.QLineEdit( self.analyzetankPage) self.lineEdit_temperature_analyzeTank.setGeometry( QtCore.QRect(570, 610, 113, 22)) self.lineEdit_temperature_analyzeTank.setStyleSheet( "border-image: url(:/Images/Resources/whiteBG.png);\n" "font: 11pt \"Helvetica LT Std\";") self.lineEdit_temperature_analyzeTank.setObjectName( "lineEdit_temperature_analyzeTank") self.lineEdit_waterSalinity_analyzeTank = QtWidgets.QLineEdit( self.analyzetankPage) self.lineEdit_waterSalinity_analyzeTank.setGeometry( QtCore.QRect(570, 700, 113, 22)) self.lineEdit_waterSalinity_analyzeTank.setStyleSheet( "border-image: url(:/Images/Resources/whiteBG.png);\n" "font: 11pt \"Helvetica LT Std\";") self.lineEdit_waterSalinity_analyzeTank.setObjectName( "lineEdit_waterSalinity_analyzeTank") self.label_camFeed = QtWidgets.QLabel(self.analyzetankPage) self.label_camFeed.setGeometry(QtCore.QRect(80, 200, 551, 281)) self.label_camFeed.setStyleSheet( "border-image: url(:/Images/Resources/semiDarkBG.png);") self.label_camFeed.setText("") self.label_camFeed.setObjectName("label_camFeed") self.button_close_5 = QtWidgets.QPushButton(self.analyzetankPage) self.button_close_5.setGeometry(QtCore.QRect(670, 40, 21, 21)) self.button_close_5.setStyleSheet( "QPushButton{\n" " border-image: url(:/Images/Resources/exitBlue.png);\n" "background-repeat: none;\n" "}\n" "\n" "QPushButton:hover{\n" " border-image: url(:/Images/Resources/exitGrey.png);\n" "}\n" "\n" "QPushButton:pressed{\n" " border-image: url(:/Images/Resources/exitGrey.png);\n" "}") self.button_close_5.setText("") self.button_close_5.setObjectName("button_close_5") self.stackedWidget_2.addWidget(self.analyzetankPage) self.settingsPage = QtWidgets.QWidget() self.settingsPage.setStyleSheet( "border-image: url(:/Images/Resources/settingsWidget.png);") self.settingsPage.setObjectName("settingsPage") self.stackedWidget_2.addWidget(self.settingsPage) self.label_username_mainPage = QtWidgets.QLabel(self.mainPage) self.label_username_mainPage.setGeometry( QtCore.QRect(120, 137, 141, 41)) self.label_username_mainPage.setStyleSheet( "border-image: url(:/Images/Resources/blueBG.png);\n" "font: 11pt \"Helvetica LT Std\";\n" "color: rgb(229, 229, 229);") self.label_username_mainPage.setObjectName("label_username_mainPage") self.label_userLetter = QtWidgets.QLabel(self.mainPage) self.label_userLetter.setGeometry(QtCore.QRect(50, 137, 31, 31)) self.label_userLetter.setStyleSheet( "border-image: url(:/Images/Resources/greyBG.png);\n" "font: 75 26pt \"Helvetica LT Std\";") self.label_userLetter.setObjectName("label_userLetter") self.stackedWidget.addWidget(self.mainPage) MainWindow.setCentralWidget(self.centralwidget) self.buttonsConnections() self.retranslateUi(MainWindow) self.stackedWidget.setCurrentIndex(0) self.button_close.clicked.connect(MainWindow.close) self.button_close_5.clicked.connect(MainWindow.close) self.button_close_2.clicked.connect(MainWindow.close) self.button_close_3.clicked.connect(MainWindow.close) self.button_close_4.clicked.connect(MainWindow.close) QtCore.QMetaObject.connectSlotsByName(MainWindow) def retranslateUi(self, MainWindow): _translate = QtCore.QCoreApplication.translate MainWindow.setWindowTitle(_translate("MainWindow", "MainWindow")) self.lineEdit_username_signIn.setText(_translate("MainWindow", "")) self.lineEdit_password_signIn.setText(_translate("MainWindow", "")) self.lineEdit_firstName_signUp.setText( _translate("MainWindow", "First name")) self.lineEdit_lastName_signUp.setText( _translate("MainWindow", "Last name")) self.lineEdit_email_signUp.setText( _translate("MainWindow", "Email address")) self.lineEdit_username_signUp.setText( _translate("MainWindow", "Username")) self.lineEdit_password_signUp.setText( _translate("MainWindow", "Password")) self.label_fishType_tankData.setText(_translate( "MainWindow", "Salmon")) self.label_harvestDate_tankData.setText( _translate("MainWindow", "29/7/2019")) self.label_feeding_tankData.setText(_translate("MainWindow", "6:00:00")) self.label_ph_tankData.setText(_translate("MainWindow", "5")) self.label_temperature_tankData.setText(_translate("MainWindow", "22")) self.label_fishNetHoles_tankData.setText(_translate("MainWindow", "1")) self.label_fishnetNeedsCleaning_tankData.setText( _translate("MainWindow", "No")) self.label_pipesNeedChanging_tankData.setText( _translate("MainWindow", "No")) self.comboBox.setItemText(0, _translate("MainWindow", "Tank 1")) self.lineEdit_fishType_createTank.setText( _translate("MainWindow", "Salmon")) self.lineEdit_date_createTank.setText( _translate("MainWindow", "DD/MM/YY")) self.lineEdit_feeding_createTank.setText(_translate( "MainWindow", "DD")) self.lineEdit_lowerTemperatureThreshold_createTank.setText( _translate("MainWindow", "18")) self.lineEdit_upperTemperatureThreshold_createTank.setText( _translate("MainWindow", "24")) self.lineEdit_waterQualityThreshold_createTank.setText( _translate("MainWindow", "0.9")) self.label_fishnetNeedsPatching_analyzeTank.setText( _translate("MainWindow", "No")) self.label_fishnetNeedsCleaning_analyzeTank.setText( _translate("MainWindow", "No")) self.label_pipesNeedChanging_analyzeTank.setText( _translate("MainWindow", "No")) self.lineEdit_temperature_analyzeTank.setText( _translate("MainWindow", "24")) self.lineEdit_waterSalinity_analyzeTank.setText( _translate("MainWindow", "21")) self.label_username_mainPage.setText( _translate("MainWindow", "Abdullah Salah")) self.label_userLetter.setText(_translate("MainWindow", "A")) def signInIsClicked(self): username_signIn = self.lineEdit_username_signIn.text() password_signIn = self.lineEdit_password_signIn.text() self.label_temperature_tankData.setText("18.43") self.user = self.db.authenticateLogIn(username_signIn, password_signIn) self.tankList = self.db.loadTankList(self.user.getUserID()) self.numberOfTanks = len(self.tankList) self.label_userLetter.setText("R") for i in range(self.numberOfTanks - 2): name = "Tank" + str(i + 2) self.comboBox.addItem(name) self.tankIndex = self.comboBox.currentIndex() self.waterQualityList = self.db.loadWaterQualityList( self.tankList[self.tankIndex].getTankID()) self.sen = Sensors("http://192.168.43.223/") if (self.user): self.displayList(self.tankIndex) self.stackedWidget.setCurrentIndex(3) self.cam.start() self.camTimer.timeout.connect(lambda: self.camFeedFunc()) self.camTimer.start(100) else: print("INVALID USERNAME OR PASSWORD") def camFeedFunc(self): self.fr = self.cam.getFrame() self.im = cv2.imread( "/Users/rowanhisham/Desktop/833a7b77-7744-4662-b1b9-5a22c948285b.jpg", 1) frame = cv2.cvtColor(self.im, cv2.COLOR_BGR2RGB) img = QtGui.QImage(frame, frame.shape[1], frame.shape[0], QtGui.QImage.Format_RGB888) pix = QtGui.QPixmap.fromImage(img) self.label_camFeed.setScaledContents(True) self.label_camFeed.setPixmap(pix) def captureImage(self): return self.im # return self.fr.copy() def displayList(self, tankIndex): if (self.user): self.label_username_mainPage.setText(self.user.getFirstName() + " " + self.user.getLastName()) # self.label_user_admin.setText("") self.label_fishType_tankData.setText( self.tankList[tankIndex].getFishType()) self.label_harvestDate_tankData.setText( self.tankList[tankIndex].getHarvestDate()) self.label_feeding_tankData.setText( self.tankList[tankIndex].getFeedingSchedule()) self.label_ph_tankData.setText( str(self.waterQualityList[0].getpH())) self.temperatureReading() def temperatureReading(self): print("temp timerrrrr") self.temp = self.sen.getTemperature() if (float(self.temp) >= 18): self.label_temperature_tankData.setText( "WARNING! Temperature is " + self.temp + " C") self.em = emailNotifier(self.user, self.temp) self.em.sendEmail() else: self.label_temperature_tankData.setText(self.sen.getTemperature()) def updateTankData(self): self.tankIndex = self.comboBox.currentIndex() self.displayList(self.tankIndex) def signUpfromLoginPageIsClicked(self): self.stackedWidget.setCurrentIndex(1) def signUpfromsignUpPageIsClicked(self): self.stackedWidget.setCurrentIndex(0) username_signUp = self.lineEdit_username_signUp.text() password_signUp = self.lineEdit_password_signUp.text() firstName_signUp = self.lineEdit_firstName_signUp.text() lastName_signUp = self.lineEdit_lastName_signUp.text() email_signUp = self.lineEdit_email_signUp.text() def faceIdIsClicked(self): self.stackedWidget.setCurrentIndex(2) def goToLoginPage(self): self.stackedWidget.setCurrentIndex(0) def dashboardIsClicked(self): self.stackedWidget_2.setCurrentIndex(0) def createTankIsClicked(self): self.stackedWidget_2.setCurrentIndex(1) def createTankButtonClicked(self): fishType_createTank = self.lineEdit_fishType_createTank.text() date_createTank = self.lineEdit_date_createTank.text() feeding_createTank = self.lineEdit_feeding_createTank.text() lowerTemperatureThreshold_createTank = self.lineEdit_lowerTemperatureThreshold_createTank.text( ) upperTemperatureThreshold_createTank = self.lineEdit_upperTemperatureThreshold_createTank.text( ) waterQualityThreshold_createTank = self.lineEdit_waterQualityThreshold_createTank.text( ) def reportIsClicked(self): webbrowser.open( "https://app.powerbi.com/view?r=eyJrIjoiZjhkMzViNTUtMDU3Yy00NTBhLTg1OWUtZjU1OGU1NzcyZjFiIiwidCI6ImVhZjYyNGM4LWEwYzQtNDE5NS04N2QyLTQ0M2U1ZDc1MTZjZCIsImMiOjh9&fbclid=IwAR29_qNsg6Nwu1QKUFX6OjKhhUDT77pEpZHJDb0ZE1-OwoRCjhy1En90DAc" ) def emailIsClicked(self): pass def analyzeTankIsClicked(self): self.stackedWidget_2.setCurrentIndex(2) def settingsIsClicked(self): self.stackedWidget_2.setCurrentIndex(3) def cleaningIsClicked(self): pred = self.clean.predict(self.captureImage()) if (pred == "yes"): self.label_fishnetNeedsCleaning_analyzeTank.setText("Yes") elif (pred == "no"): self.label_fishnetNeedsCleaning_analyzeTank.setText("No") else: self.label_fishnetNeedsCleaning_analyzeTank.setText( "Can't determine") def holesIsClicked(self): pred = self.holes.predict(self.captureImage()) if (pred == "yes"): self.label_fishnetNeedsPatching_analyzeTank.setText("Yes") elif (pred == "no"): self.label_fishnetNeedsPatching_analyzeTank.setText("No") else: self.label_fishnetNeedsPatching_analyzeTank.setText( "Can't determine") def pipesIsClicked(self): pass def predictIsClicked(self): pass def buttonsConnections(self): self.button_signIn_signIn.clicked.connect(self.signInIsClicked) self.button_signUp_signIn.clicked.connect( self.signUpfromLoginPageIsClicked) self.button_faceID_signIn.clicked.connect(self.faceIdIsClicked) self.button_backToSignIn.clicked.connect(self.goToLoginPage) self.button_signUp_signUp.clicked.connect( self.signUpfromsignUpPageIsClicked) self.button_logout.clicked.connect(self.goToLoginPage) self.button_dashboard.clicked.connect(self.dashboardIsClicked) self.button_createTank.clicked.connect(self.createTankIsClicked) self.button_analyzeTank.clicked.connect(self.analyzeTankIsClicked) self.button_settings.clicked.connect(self.settingsIsClicked) self.button_cleaning_analyzeTank.clicked.connect( self.cleaningIsClicked) self.button_holes_analyzeTank.clicked.connect(self.holesIsClicked) self.button_pipes_analyzeTank.clicked.connect(self.pipesIsClicked) self.button_predict_analyzeTank.clicked.connect(self.predictIsClicked) self.button_create_createTank.clicked.connect( self.createTankButtonClicked) self.button_report.clicked.connect(self.reportIsClicked) self.button_email.clicked.connect(self.emailIsClicked) self.comboBox.currentIndexChanged.connect(self.updateTankData)