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
+16 -21
View File
@@ -2,9 +2,10 @@
# Form implementation generated from reading ui file 'brewpi.ui'
#
# Created by: PyQt5 UI code generator 5.14.1
# Created by: PyQt5 UI code generator 5.15.10
#
from PyQt5.Qwt import *
# WARNING: Any manual changes made to this file will be lost when pyuic5 is
# run again. Do not edit this file unless you know what you are doing.
from PyQt5 import QtCore, QtGui, QtWidgets
@@ -189,13 +190,11 @@ class Ui_MainWindow(object):
self.groupBox_2.setSizePolicy(sizePolicy)
self.groupBox_2.setMinimumSize(QtCore.QSize(0, 0))
self.groupBox_2.setObjectName("groupBox_2")
self.Slider_temp_soll = QwtSlider(self.groupBox_2)
self.Slider_temp_soll = QtWidgets.QSlider(self.groupBox_2)
self.Slider_temp_soll.setGeometry(QtCore.QRect(20, 70, 63, 281))
self.Slider_temp_soll.setLowerBound(0.0)
self.Slider_temp_soll.setUpperBound(100.0)
self.Slider_temp_soll.setScaleMaxMajor(7)
self.Slider_temp_soll.setScaleMaxMinor(3)
self.Slider_temp_soll.setScaleStepSize(0.0)
self.Slider_temp_soll.setMinimum(0)
self.Slider_temp_soll.setMaximum(100)
self.Slider_temp_soll.setOrientation(QtCore.Qt.Vertical)
self.Slider_temp_soll.setObjectName("Slider_temp_soll")
self.label_6 = QtWidgets.QLabel(self.groupBox_2)
self.label_6.setGeometry(QtCore.QRect(10, 370, 67, 31))
@@ -214,13 +213,11 @@ class Ui_MainWindow(object):
self.horizontalLayout.addWidget(self.groupBox_2)
self.groupBox = QtWidgets.QGroupBox(self.horizontalTabWidgetPage1)
self.groupBox.setObjectName("groupBox")
self.Slider_pwr_soll = QwtSlider(self.groupBox)
self.Slider_pwr_soll = QtWidgets.QSlider(self.groupBox)
self.Slider_pwr_soll.setGeometry(QtCore.QRect(10, 70, 81, 281))
self.Slider_pwr_soll.setLowerBound(0.0)
self.Slider_pwr_soll.setUpperBound(100.0)
self.Slider_pwr_soll.setScaleMaxMajor(7)
self.Slider_pwr_soll.setScaleMaxMinor(3)
self.Slider_pwr_soll.setScaleStepSize(0.0)
self.Slider_pwr_soll.setMinimum(0)
self.Slider_pwr_soll.setMaximum(100)
self.Slider_pwr_soll.setOrientation(QtCore.Qt.Vertical)
self.Slider_pwr_soll.setObjectName("Slider_pwr_soll")
self.checkbox_heater_activate = QtWidgets.QCheckBox(self.groupBox)
self.checkbox_heater_activate.setGeometry(QtCore.QRect(30, 370, 81, 31))
@@ -235,13 +232,11 @@ class Ui_MainWindow(object):
self.checkbox_stirrer_activate = QtWidgets.QCheckBox(self.groupBox_3)
self.checkbox_stirrer_activate.setGeometry(QtCore.QRect(40, 370, 81, 23))
self.checkbox_stirrer_activate.setObjectName("checkbox_stirrer_activate")
self.Slider_speed_soll = QwtSlider(self.groupBox_3)
self.Slider_speed_soll = QtWidgets.QSlider(self.groupBox_3)
self.Slider_speed_soll.setGeometry(QtCore.QRect(40, 70, 63, 281))
self.Slider_speed_soll.setLowerBound(0.0)
self.Slider_speed_soll.setUpperBound(100.0)
self.Slider_speed_soll.setScaleMaxMajor(7)
self.Slider_speed_soll.setScaleMaxMinor(3)
self.Slider_speed_soll.setScaleStepSize(0.0)
self.Slider_speed_soll.setMinimum(0)
self.Slider_speed_soll.setMaximum(100)
self.Slider_speed_soll.setOrientation(QtCore.Qt.Vertical)
self.Slider_speed_soll.setObjectName("Slider_speed_soll")
self.label_11 = QtWidgets.QLabel(self.groupBox_3)
self.label_11.setGeometry(QtCore.QRect(0, 30, 141, 31))
@@ -1277,7 +1272,7 @@ class Ui_MainWindow(object):
self.label_5.setText(_translate("MainWindow", "Power [W]"))
self.label_7.setText(_translate("MainWindow", "State"))
self.label_state.setText(_translate("MainWindow", "State"))
self.plainTextUri.setPlainText(_translate("MainWindow", "ws://localhost:8765"))
self.plainTextUri.setPlainText(_translate("MainWindow", "ws://brewpi:8765"))
self.label_8.setText(_translate("MainWindow", "Host"))
self.menu_File.setTitle(_translate("MainWindow", "&File"))
self.menu_Help.setTitle(_translate("MainWindow", "&Help"))