def initialize_fans(self): """Initialize fans to the initial slider values.""" grid.set_fan(ser=self.ser, fan=1, voltage=grid.calculate_voltage( self.ui.lcdNumberFan1.value()), lock=self.lock) grid.set_fan(ser=self.ser, fan=2, voltage=grid.calculate_voltage( self.ui.lcdNumberFan2.value()), lock=self.lock) grid.set_fan(ser=self.ser, fan=3, voltage=grid.calculate_voltage( self.ui.lcdNumberFan3.value()), lock=self.lock) grid.set_fan(ser=self.ser, fan=4, voltage=grid.calculate_voltage( self.ui.lcdNumberFan4.value()), lock=self.lock) grid.set_fan(ser=self.ser, fan=5, voltage=grid.calculate_voltage( self.ui.lcdNumberFan5.value()), lock=self.lock) grid.set_fan(ser=self.ser, fan=6, voltage=grid.calculate_voltage( self.ui.lcdNumberFan6.value()), lock=self.lock)
def setup_ui_logic(self): """Define QT signal and slot connections and initializes UI values.""" # Update "Fan percentage" LCD values from horizontal sliders initial value self.ui.lcdNumberFan1.display(self.ui.horizontalSliderFan1.value()) self.ui.lcdNumberFan2.display(self.ui.horizontalSliderFan2.value()) self.ui.lcdNumberFan3.display(self.ui.horizontalSliderFan3.value()) self.ui.lcdNumberFan4.display(self.ui.horizontalSliderFan4.value()) self.ui.lcdNumberFan5.display(self.ui.horizontalSliderFan5.value()) self.ui.lcdNumberFan6.display(self.ui.horizontalSliderFan6.value()) # Update "fan labels" from "Fan Config" tab self.ui.groupBoxFan1.setTitle(self.ui.lineEditFan1.text()) self.ui.groupBoxFan2.setTitle(self.ui.lineEditFan2.text()) self.ui.groupBoxFan3.setTitle(self.ui.lineEditFan3.text()) self.ui.groupBoxFan4.setTitle(self.ui.lineEditFan4.text()) self.ui.groupBoxFan5.setTitle(self.ui.lineEditFan5.text()) self.ui.groupBoxFan6.setTitle(self.ui.lineEditFan6.text()) self.ui.groupBoxCurrentFan1.setTitle(self.ui.lineEditFan1.text()) self.ui.groupBoxCurrentFan2.setTitle(self.ui.lineEditFan2.text()) self.ui.groupBoxCurrentFan3.setTitle(self.ui.lineEditFan3.text()) self.ui.groupBoxCurrentFan4.setTitle(self.ui.lineEditFan4.text()) self.ui.groupBoxCurrentFan5.setTitle(self.ui.lineEditFan5.text()) self.ui.groupBoxCurrentFan6.setTitle(self.ui.lineEditFan6.text()) self.ui.groupBoxConfigFan1.setTitle(self.ui.lineEditFan1.text()) self.ui.groupBoxConfigFan2.setTitle(self.ui.lineEditFan2.text()) self.ui.groupBoxConfigFan3.setTitle(self.ui.lineEditFan3.text()) self.ui.groupBoxConfigFan4.setTitle(self.ui.lineEditFan4.text()) self.ui.groupBoxConfigFan5.setTitle(self.ui.lineEditFan5.text()) self.ui.groupBoxConfigFan6.setTitle(self.ui.lineEditFan6.text()) # Connect events from sliders to update "Fan percentage" LCD value self.ui.horizontalSliderFan1.valueChanged.connect( self.ui.lcdNumberFan1.display) self.ui.horizontalSliderFan2.valueChanged.connect( self.ui.lcdNumberFan2.display) self.ui.horizontalSliderFan3.valueChanged.connect( self.ui.lcdNumberFan3.display) self.ui.horizontalSliderFan4.valueChanged.connect( self.ui.lcdNumberFan4.display) self.ui.horizontalSliderFan5.valueChanged.connect( self.ui.lcdNumberFan5.display) self.ui.horizontalSliderFan6.valueChanged.connect( self.ui.lcdNumberFan6.display) # Connect "Manual/Automatic" fan control radio button self.ui.radioButtonManual.toggled.connect(self.disable_enable_sliders) # Connect "Simulated temperatures" checkbox self.ui.checkBoxSimulateTemp.stateChanged.connect( self.simulate_temperatures) # Connect "Restart Communication" button self.ui.pushButtonRestart.clicked.connect(self.restart) # Connect "Add CPU sensors" button self.ui.pushButtonAddCPUSensor.clicked.connect(self.add_cpu_sensors) # Connect "Add GPU sensors" button self.ui.pushButtonAddGPUSensor.clicked.connect(self.add_gpu_sensors) # Connect "Remove CPU sensors" button self.ui.pushButtonRemoveCPUSensor.clicked.connect( self.remove_cpu_sensors) # Connect "Remove GPU sensors" button self.ui.pushButtonRemoveGPUSensor.clicked.connect( self.remove_gpu_sensors) # Connect event from changed serial port combo box self.ui.comboBoxComPorts.currentIndexChanged.connect( self.init_communication) # Connect event from changed polling interval combo box self.ui.comboBoxPolling.currentIndexChanged.connect( self.init_communication) # Update fan voltage (speed) based on changes to the horizontal sliders # # "grid.calculate_voltage" converts the percent value to valid voltages supported by the Grid # "lambda" is needed to send four arguments (serial object, fan id, fan voltage and lock object) self.ui.horizontalSliderFan1.valueChanged.connect(lambda: grid.set_fan( ser=self.ser, fan=1, voltage=grid.calculate_voltage(self.ui.lcdNumberFan1.value()), lock=self.lock)) self.ui.horizontalSliderFan2.valueChanged.connect(lambda: grid.set_fan( ser=self.ser, fan=2, voltage=grid.calculate_voltage(self.ui.lcdNumberFan2.value()), lock=self.lock)) self.ui.horizontalSliderFan3.valueChanged.connect(lambda: grid.set_fan( ser=self.ser, fan=3, voltage=grid.calculate_voltage(self.ui.lcdNumberFan3.value()), lock=self.lock)) self.ui.horizontalSliderFan4.valueChanged.connect(lambda: grid.set_fan( ser=self.ser, fan=4, voltage=grid.calculate_voltage(self.ui.lcdNumberFan4.value()), lock=self.lock)) self.ui.horizontalSliderFan5.valueChanged.connect(lambda: grid.set_fan( ser=self.ser, fan=5, voltage=grid.calculate_voltage(self.ui.lcdNumberFan5.value()), lock=self.lock)) self.ui.horizontalSliderFan6.valueChanged.connect(lambda: grid.set_fan( ser=self.ser, fan=6, voltage=grid.calculate_voltage(self.ui.lcdNumberFan6.value()), lock=self.lock)) # Connect "Change value" events from "Fan config" tab (all "spin boxes") to verify that the values are valid for fan in range(1, 7): getattr(self.ui, "spinBoxMinSpeedFan" + str(fan)).valueChanged.connect(self.validate_fan_config) getattr(self.ui, "spinBoxStartIncreaseSpeedFan" + str(fan)).valueChanged.connect(self.validate_fan_config) getattr(self.ui, "spinBoxIntermediateSpeedFan" + str(fan)).valueChanged.connect(self.validate_fan_config) getattr(self.ui, "spinBoxMaxSpeedFan" + str(fan)).valueChanged.connect(self.validate_fan_config) getattr(self.ui, "spinBoxIntermediateTempFan" + str(fan)).valueChanged.connect(self.validate_fan_config) getattr(self.ui, "spinBoxMaxTempFan" + str(fan)).valueChanged.connect(self.validate_fan_config) # Connect fan rpm signal (from polling thread) to fan rpm label self.thread.rpm_signal_fan1.connect(self.ui.labelRPMFan1.setText) self.thread.rpm_signal_fan2.connect(self.ui.labelRPMFan2.setText) self.thread.rpm_signal_fan3.connect(self.ui.labelRPMFan3.setText) self.thread.rpm_signal_fan4.connect(self.ui.labelRPMFan4.setText) self.thread.rpm_signal_fan5.connect(self.ui.labelRPMFan5.setText) self.thread.rpm_signal_fan6.connect(self.ui.labelRPMFan6.setText) # Connect fan voltage signal (from polling thread) to fan voltage value self.thread.voltage_signal_fan1.connect(self.ui.labelVFan1.setText) self.thread.voltage_signal_fan2.connect(self.ui.labelVFan2.setText) self.thread.voltage_signal_fan3.connect(self.ui.labelVFan3.setText) self.thread.voltage_signal_fan4.connect(self.ui.labelVFan4.setText) self.thread.voltage_signal_fan5.connect(self.ui.labelVFan5.setText) self.thread.voltage_signal_fan6.connect(self.ui.labelVFan6.setText) # Connect pixmap signal (from polling thread) for updating the fan status icon # "lambda" is needed to transmit two arguments, "icon resource name" from the signal (x) and fan id self.thread.pixmap_signal_fan1.connect( lambda x: self.change_fan_icon(x, 1)) self.thread.pixmap_signal_fan2.connect( lambda x: self.change_fan_icon(x, 2)) self.thread.pixmap_signal_fan3.connect( lambda x: self.change_fan_icon(x, 3)) self.thread.pixmap_signal_fan4.connect( lambda x: self.change_fan_icon(x, 4)) self.thread.pixmap_signal_fan5.connect( lambda x: self.change_fan_icon(x, 5)) self.thread.pixmap_signal_fan6.connect( lambda x: self.change_fan_icon(x, 6)) # Connect CPU and GPU temperature signals (from polling thread) to GPU and CPU LCD values self.thread.cpu_temp_signal.connect( self.ui.lcdNumberCurrentCPU.display) self.thread.gpu_temp_signal.connect( self.ui.lcdNumberCurrentGPU.display) # Connect update signal to fan update function self.thread.update_signal.connect(self.update_fan_speed) # Connect CPU and GPU temperature signals (from polling thread) to function for updating HWMon status self.thread.hwmon_status_signal.connect( self.ui.labelHWMonStatus.setText) # Connect exception signal to show exception message from running thread # This is needed as it's not possible to show a message box widget from the QThread directly self.thread.exception_signal.connect(self.thread_exception_handling)