From 40f407a7007f94609e2814353e66e4ee7fe2949e Mon Sep 17 00:00:00 2001 From: HugoCLSC Date: Tue, 17 Mar 2026 12:27:38 +0000 Subject: [PATCH 1/5] Dynamically retrieve the max heater temperatures for numpads --- BlocksScreen/lib/panels/controlTab.py | 57 ++++++++++++++++++--------- 1 file changed, 38 insertions(+), 19 deletions(-) diff --git a/BlocksScreen/lib/panels/controlTab.py b/BlocksScreen/lib/panels/controlTab.py index be84c8bc..d4a7913d 100644 --- a/BlocksScreen/lib/panels/controlTab.py +++ b/BlocksScreen/lib/panels/controlTab.py @@ -1,5 +1,5 @@ from __future__ import annotations - +import logging import re import typing from functools import partial @@ -252,24 +252,6 @@ def __init__( self.numpadPage.request_back.connect(self.request_back_button) self.addWidget(self.numpadPage) - self.panel.extruder_temp_display.clicked.connect( - lambda: self.request_numpad[str, int, "PyQt_PyObject", int, int].emit( - "Extruder Temperature", - int(round(float(self.panel.extruder_temp_display.secondary_text))), - self.on_numpad_change, - 0, - 370, # TODO: Get this value from printer objects - ) - ) - self.panel.bed_temp_display.clicked.connect( - lambda: self.request_numpad[str, int, "PyQt_PyObject", int, int].emit( - "Bed Temperature", - int(round(float(self.panel.bed_temp_display.secondary_text))), - self.on_numpad_change, - 0, - 120, # TODO: Get this value from printer objects - ) - ) self.request_numpad[str, int, "PyQt_PyObject", int, int].connect( self.on_numpad_request ) @@ -304,6 +286,8 @@ def __init__( self.printer.fan_update[str, str, float].connect(self.on_fan_object_update) self.printer.fan_update[str, str, int].connect(self.on_fan_object_update) + self.printer.printer_config.connect(self.on_printer_config) + def _handle_z_tilt_object_update(self, value, state): if state: self.call_load_panel.emit(False, "") @@ -470,6 +454,41 @@ def _handle_gcode_response(self, messages: list): f"Retries: {retries_done}/{retries_total} | Range: {probed_range:.6f} | Tolerance: {tolerance:.6f}", ) + def on_printer_config(self, config: dict): + """Slot that receives the full printer configuration, + + Additionally, this method configures the signal connections + between controllable heaters and numpad calls + """ + e_default_min = b_default_min = 0 + e_default_max = 350 + b_default_max = 100 + extruder = config.get("extruder", None) or {} + bed = config.get("heater_bed", None) or {} + e_min_temp = extruder.get("min_temp", e_default_min) + e_max_temp = extruder.get("max_temp", e_default_max) + b_max_temp = bed.get("max_temp", b_default_max) + b_min_temp = bed.get("min_temp", b_default_min) + # Configure numpads + self.panel.extruder_temp_display.clicked.connect( + lambda: self.request_numpad[str, int, "PyQt_PyObject", int, int].emit( + "Extruder Temperature", + int(round(float(self.panel.extruder_temp_display.secondary_text))), + self.on_numpad_change, + e_min_temp, + e_max_temp, + ) + ) + self.panel.bed_temp_display.clicked.connect( + lambda: self.request_numpad[str, int, "PyQt_PyObject", int, int].emit( + "Bed Temperature", + int(round(float(self.panel.bed_temp_display.secondary_text))), + self.on_numpad_change, + b_min_temp, + b_max_temp, + ) + ) + def handle_ztilt(self): """Handle Z-Tilt Adjustment""" self.call_load_panel.emit(True, "Please wait, performing Z-axis calibration.") From bd9874286699df55324bdeb239c657f5a0c7ff69 Mon Sep 17 00:00:00 2001 From: HugoCLSC Date: Tue, 17 Mar 2026 12:48:07 +0000 Subject: [PATCH 2/5] Del unused import --- BlocksScreen/lib/panels/controlTab.py | 1 - 1 file changed, 1 deletion(-) diff --git a/BlocksScreen/lib/panels/controlTab.py b/BlocksScreen/lib/panels/controlTab.py index d4a7913d..065ded82 100644 --- a/BlocksScreen/lib/panels/controlTab.py +++ b/BlocksScreen/lib/panels/controlTab.py @@ -1,5 +1,4 @@ from __future__ import annotations -import logging import re import typing from functools import partial From 8962b4fc0371617442715b6e59cb1ae76cabf173 Mon Sep 17 00:00:00 2001 From: HugoCLSC Date: Tue, 17 Mar 2026 14:36:29 +0000 Subject: [PATCH 3/5] Add same logic to tune page, disconnect previouslly connected signals --- BlocksScreen/lib/panels/controlTab.py | 31 +++++++----- BlocksScreen/lib/panels/printTab.py | 1 + BlocksScreen/lib/panels/widgets/tunePage.py | 53 ++++++++++++++------- 3 files changed, 57 insertions(+), 28 deletions(-) diff --git a/BlocksScreen/lib/panels/controlTab.py b/BlocksScreen/lib/panels/controlTab.py index 065ded82..ea6082a2 100644 --- a/BlocksScreen/lib/panels/controlTab.py +++ b/BlocksScreen/lib/panels/controlTab.py @@ -2,6 +2,7 @@ import re import typing from functools import partial +import logging from helper_methods import normalize from lib.moonrakerComm import MoonWebSocket @@ -20,6 +21,9 @@ class ControlTab(QtWidgets.QStackedWidget): """Printer Control Stacked Widget""" + E_DEFAULT_MIN = B_DEFAULT_MIN = 0 + E_DEFAULT_MAX = 300 + B_DEFAULT_MAX = 100 request_back_button = QtCore.pyqtSignal(name="request-back-button") request_change_page = QtCore.pyqtSignal(int, int, name="request-change-page") request_numpad_signal = QtCore.pyqtSignal( @@ -453,29 +457,32 @@ def _handle_gcode_response(self, messages: list): f"Retries: {retries_done}/{retries_total} | Range: {probed_range:.6f} | Tolerance: {tolerance:.6f}", ) - def on_printer_config(self, config: dict): + @QtCore.pyqtSlot(dict, name="printer_config") + def on_printer_config(self, config: dict) -> None: """Slot that receives the full printer configuration, Additionally, this method configures the signal connections between controllable heaters and numpad calls """ - e_default_min = b_default_min = 0 - e_default_max = 350 - b_default_max = 100 + try: + self.panel.extruder_temp_display.clicked.disconnect() + self.panel.bed_temp_display.clicked.disconnect() + except Exception: + logging.debug("Signals were not connected") extruder = config.get("extruder", None) or {} bed = config.get("heater_bed", None) or {} - e_min_temp = extruder.get("min_temp", e_default_min) - e_max_temp = extruder.get("max_temp", e_default_max) - b_max_temp = bed.get("max_temp", b_default_max) - b_min_temp = bed.get("min_temp", b_default_min) + e_min_temp = extruder.get("min_temp", 0) + e_max_temp = extruder.get("max_temp", 300) + b_max_temp = bed.get("max_temp", 100) + b_min_temp = bed.get("min_temp", 0) # Configure numpads self.panel.extruder_temp_display.clicked.connect( lambda: self.request_numpad[str, int, "PyQt_PyObject", int, int].emit( "Extruder Temperature", int(round(float(self.panel.extruder_temp_display.secondary_text))), self.on_numpad_change, - e_min_temp, - e_max_temp, + int(e_min_temp), + int(e_max_temp), ) ) self.panel.bed_temp_display.clicked.connect( @@ -483,8 +490,8 @@ def on_printer_config(self, config: dict): "Bed Temperature", int(round(float(self.panel.bed_temp_display.secondary_text))), self.on_numpad_change, - b_min_temp, - b_max_temp, + int(b_min_temp), + int(b_max_temp), ) ) diff --git a/BlocksScreen/lib/panels/printTab.py b/BlocksScreen/lib/panels/printTab.py index 65927aae..aec952cd 100644 --- a/BlocksScreen/lib/panels/printTab.py +++ b/BlocksScreen/lib/panels/printTab.py @@ -268,6 +268,7 @@ def __init__( self.change_page(self.indexOf(self.print_page)) # force set the initial page self.save_config_btn.clicked.connect(self.save_config) self.BasePopup_z_offset.accepted.connect(self.update_configuration_file) + self.printer.printer_config.connect(self.tune_page.on_printer_config) @QtCore.pyqtSlot(str, dict, name="on_print_stats_update") @QtCore.pyqtSlot(str, float, name="on_print_stats_update") diff --git a/BlocksScreen/lib/panels/widgets/tunePage.py b/BlocksScreen/lib/panels/widgets/tunePage.py index 301c5cd1..42f8f267 100644 --- a/BlocksScreen/lib/panels/widgets/tunePage.py +++ b/BlocksScreen/lib/panels/widgets/tunePage.py @@ -1,5 +1,6 @@ import re import typing +import logging from helper_methods import normalize from lib.utils.blocks_button import BlocksCustomButton @@ -45,31 +46,51 @@ def __init__(self, parent) -> None: self.sensors_menu_btn.clicked.connect(self.request_sensorsPage.emit) self.tune_babystep_menu_btn.clicked.connect(self.request_bbpPage.emit) self.tune_back_btn.clicked.connect(self.request_back) - self.bed_display.clicked.connect( - lambda: self.request_numpad[str, int, "PyQt_PyObject", int, int].emit( - "Bed", - int(round(self.bed_target)), - self.on_numpad_change, - 0, - 120, # TODO: Get this value from printer objects + self.speed_display.clicked.connect( + lambda: self.request_sliderPage[str, int, "PyQt_PyObject", int, int].emit( + "Speed", + int(self.speed_factor_override * 100), + self.on_slider_change, + 10, + 300, ) ) + + @QtCore.pyqtSlot(dict, name="printer_config") + def on_printer_config(self, config: dict) -> None: + """Slot that receives the full printer configuration, + + Additionally, this method configures the signal connections + between controllable heaters and numpad calls + """ + try: + self.extruder_display.clicked.disconnect() + self.bed_display.clicked.disconnect() + except Exception: + logging.debug("Signals were not connected") + extruder = config.get("extruder", None) or {} + bed = config.get("heater_bed", None) or {} + e_min_temp = extruder.get("min_temp", 0) + e_max_temp = extruder.get("max_temp", 300) + b_max_temp = bed.get("max_temp", 100) + b_min_temp = bed.get("min_temp", 0) + # Configure numpads self.extruder_display.clicked.connect( lambda: self.request_numpad[str, int, "PyQt_PyObject", int, int].emit( "Extruder", int(round(self.extruder_target)), self.on_numpad_change, - 0, - 300, # TODO: Get this value from printer objects + int(e_min_temp), + int(e_max_temp), ) ) - self.speed_display.clicked.connect( - lambda: self.request_sliderPage[str, int, "PyQt_PyObject", int, int].emit( - "Speed", - int(self.speed_factor_override * 100), - self.on_slider_change, - 10, - 300, + self.bed_display.clicked.connect( + lambda: self.request_numpad[str, int, "PyQt_PyObject", int, int].emit( + "Bed", + int(round(self.bed_target)), + self.on_numpad_change, + int(b_min_temp), + int(b_max_temp), ) ) From 587d1b650863c811ad443ac3ab1698e16c27c801 Mon Sep 17 00:00:00 2001 From: HugoCLSC Date: Tue, 17 Mar 2026 14:41:01 +0000 Subject: [PATCH 4/5] Conform to the new logging strategy --- BlocksScreen/lib/panels/controlTab.py | 5 ++++- BlocksScreen/lib/panels/widgets/tunePage.py | 5 ++++- 2 files changed, 8 insertions(+), 2 deletions(-) diff --git a/BlocksScreen/lib/panels/controlTab.py b/BlocksScreen/lib/panels/controlTab.py index ea6082a2..bcb2222d 100644 --- a/BlocksScreen/lib/panels/controlTab.py +++ b/BlocksScreen/lib/panels/controlTab.py @@ -18,6 +18,9 @@ from PyQt6 import QtCore, QtGui, QtWidgets +_logger = logging.getLogger(__name__) + + class ControlTab(QtWidgets.QStackedWidget): """Printer Control Stacked Widget""" @@ -468,7 +471,7 @@ def on_printer_config(self, config: dict) -> None: self.panel.extruder_temp_display.clicked.disconnect() self.panel.bed_temp_display.clicked.disconnect() except Exception: - logging.debug("Signals were not connected") + _logger.debug("Signals were not connected") extruder = config.get("extruder", None) or {} bed = config.get("heater_bed", None) or {} e_min_temp = extruder.get("min_temp", 0) diff --git a/BlocksScreen/lib/panels/widgets/tunePage.py b/BlocksScreen/lib/panels/widgets/tunePage.py index 42f8f267..1b68c2f7 100644 --- a/BlocksScreen/lib/panels/widgets/tunePage.py +++ b/BlocksScreen/lib/panels/widgets/tunePage.py @@ -9,6 +9,9 @@ from PyQt6 import QtCore, QtGui, QtWidgets +_logger = logging.getLogger(__name__) + + class TuneWidget(QtWidgets.QWidget): request_back: typing.ClassVar[QtCore.pyqtSignal] = QtCore.pyqtSignal( name="request_back_page" @@ -67,7 +70,7 @@ def on_printer_config(self, config: dict) -> None: self.extruder_display.clicked.disconnect() self.bed_display.clicked.disconnect() except Exception: - logging.debug("Signals were not connected") + _logger.debug("Signals were not connected") extruder = config.get("extruder", None) or {} bed = config.get("heater_bed", None) or {} e_min_temp = extruder.get("min_temp", 0) From c262416993b80e834bf61a51549ecf6258417d50 Mon Sep 17 00:00:00 2001 From: HugoCLSC Date: Tue, 17 Mar 2026 14:49:43 +0000 Subject: [PATCH 5/5] Del unused vars --- BlocksScreen/lib/panels/controlTab.py | 3 --- 1 file changed, 3 deletions(-) diff --git a/BlocksScreen/lib/panels/controlTab.py b/BlocksScreen/lib/panels/controlTab.py index bcb2222d..8df4ab4d 100644 --- a/BlocksScreen/lib/panels/controlTab.py +++ b/BlocksScreen/lib/panels/controlTab.py @@ -24,9 +24,6 @@ class ControlTab(QtWidgets.QStackedWidget): """Printer Control Stacked Widget""" - E_DEFAULT_MIN = B_DEFAULT_MIN = 0 - E_DEFAULT_MAX = 300 - B_DEFAULT_MAX = 100 request_back_button = QtCore.pyqtSignal(name="request-back-button") request_change_page = QtCore.pyqtSignal(int, int, name="request-change-page") request_numpad_signal = QtCore.pyqtSignal(