Remove PyQt5.Qwt dependency from the GUI client

PyQt5.Qwt isn't pip-installable; it only existed via the apt package
python3-pyqt5.qwt, so pip-installing client/requirements.txt's plain
PyPI PyQt5 always crashed with "No module named 'PyQt5.Qwt'".

Qwt was only used for 3 QwtSlider widgets (Slider_temp_soll,
Slider_pwr_soll, Slider_speed_soll). Swap them for stock QSlider in
brewpi.ui, regenerate brewpi_win.py via pyuic5, and update
brewpi_gui.py's setLowerBound/setUpperBound calls to QSlider's
integer-only setMinimum/setMaximum. The GUI now runs from a plain
`pip install -r client/requirements.txt` venv with no system PyQt5
packages required.

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
This commit is contained in:
2026-06-18 21:24:09 +02:00
co-authored by Claude Sonnet 4.6
parent 1bf3929b60
commit 88357b31f6
4 changed files with 45 additions and 75 deletions
+7 -7
View File
@@ -105,7 +105,7 @@ class Window(QtWidgets.QMainWindow, Ui_MainWindow):
if 'Temp' in submsg:
self.lcdNumber_temp_soll.display(str(submsg['Temp']))
if self.slider_temp_soll_initial_update:
self.Slider_temp_soll.setValue(submsg['Temp'])
self.Slider_temp_soll.setValue(int(round(submsg['Temp'])))
self.slider_temp_soll_initial_update = False
if 'Rate' in submsg:
subsubmsg = submsg['Rate']
@@ -133,14 +133,14 @@ class Window(QtWidgets.QMainWindow, Ui_MainWindow):
elif "Power" in key:
self.lcdNumber_power_heater.display(msg['Power'])
if self.slider_pwr_initial_update:
self.Slider_pwr_soll.setValue(msg['Power'])
self.Slider_pwr_soll.setValue(int(round(msg['Power'])))
self.slider_pwr_initial_update = False
elif "Capabilities" in key:
submsg = msg['Capabilities']
if "Power" in submsg:
submsg = submsg['Power']
self.Slider_pwr_soll.setLowerBound(submsg['Min'])
self.Slider_pwr_soll.setUpperBound(submsg['Max'])
self.Slider_pwr_soll.setMinimum(int(submsg['Min']))
self.Slider_pwr_soll.setMaximum(int(submsg['Max']))
def on_stirrer_changed(self, msg):
print("on_stirrer_changed {}".format(msg))
@@ -151,14 +151,14 @@ class Window(QtWidgets.QMainWindow, Ui_MainWindow):
self.checkbox_stirrer_activate_initial_update = False
elif "Speed" in key:
if self.slider_speed_initial_update:
self.Slider_speed_soll.setValue(msg['Speed'])
self.Slider_speed_soll.setValue(int(round(msg['Speed'])))
self.slider_speed_initial_update = False
elif "Capabilities" in key:
submsg = msg['Capabilities']
if "Power" in submsg:
submsg = submsg['Power']
self.Slider_speed_soll.setLowerBound(submsg['Min'])
self.Slider_speed_soll.setUpperBound(submsg['Max'])
self.Slider_speed_soll.setMinimum(int(submsg['Min']))
self.Slider_speed_soll.setMaximum(int(submsg['Max']))
def closeEvent(self, event):
print("Exitting gracefully!")