add stack detail popups
This commit is contained in:
parent
8eccc36f39
commit
a2b733a430
17
poetry.lock
generated
17
poetry.lock
generated
@ -26,10 +26,21 @@ category = "main"
|
||||
optional = false
|
||||
python-versions = ">=3.7"
|
||||
|
||||
[[package]]
|
||||
name = "pyserial"
|
||||
version = "3.5"
|
||||
description = "Python Serial Port Extension"
|
||||
category = "main"
|
||||
optional = false
|
||||
python-versions = "*"
|
||||
|
||||
[package.extras]
|
||||
cp2110 = ["hidapi"]
|
||||
|
||||
[metadata]
|
||||
lock-version = "1.1"
|
||||
python-versions = "^3.10"
|
||||
content-hash = "ce4feb2a6a42610a01d5e986a40980aaf9f73c3fdc2368f55ec75e70f39c70cf"
|
||||
content-hash = "9d0dcef05f7296031f76c658f997974caf9b45c1efa59678ef5823b803580e43"
|
||||
|
||||
[metadata.files]
|
||||
pyqt5 = [
|
||||
@ -64,3 +75,7 @@ pyqt5-sip = [
|
||||
{file = "PyQt5_sip-12.11.0-cp39-cp39-win_amd64.whl", hash = "sha256:42320e7a94b1085ed85d49794ed4ccfe86f1cae80b44a894db908a8aba2bc60e"},
|
||||
{file = "PyQt5_sip-12.11.0.tar.gz", hash = "sha256:b4710fd85b57edef716cc55fae45bfd5bfac6fc7ba91036f1dcc3f331ca0eb39"},
|
||||
]
|
||||
pyserial = [
|
||||
{file = "pyserial-3.5-py2.py3-none-any.whl", hash = "sha256:c4451db6ba391ca6ca299fb3ec7bae67a5c55dde170964c7a14ceefec02f2cf0"},
|
||||
{file = "pyserial-3.5.tar.gz", hash = "sha256:3c77e014170dfffbd816e6ffc205e9842efb10be9f58ec16d3e8675b4925cddb"},
|
||||
]
|
||||
|
@ -7,6 +7,7 @@ authors = ["Your Name <you@example.com>"]
|
||||
[tool.poetry.dependencies]
|
||||
python = "^3.10"
|
||||
PyQt5 = "^5.15.7"
|
||||
pyserial = "^3.5"
|
||||
|
||||
[tool.poetry.dev-dependencies]
|
||||
|
||||
|
81
test.py
81
test.py
@ -89,19 +89,23 @@ class AccumulatorData:
|
||||
|
||||
class StackGuiElement:
|
||||
title: str
|
||||
stack_id: int
|
||||
min_voltage_label: QLabel
|
||||
max_voltage_label: QLabel
|
||||
min_temp_label: QLabel
|
||||
max_temp_label: QLabel
|
||||
groupBox: QGroupBox
|
||||
detail_popup: QWidget
|
||||
|
||||
def __init__(self, title: str):
|
||||
def __init__(self, title: str, stack_id: int):
|
||||
self.title = title
|
||||
self.stack_id = stack_id
|
||||
self.min_voltage_label = QLabel()
|
||||
self.max_voltage_label = QLabel()
|
||||
self.min_temp_label = QLabel()
|
||||
self.max_temp_label = QLabel()
|
||||
self.groupBox = QGroupBox()
|
||||
self.detail_popup = None
|
||||
self.__post__init__()
|
||||
|
||||
def __post__init__(self):
|
||||
@ -109,6 +113,8 @@ class StackGuiElement:
|
||||
l2 = QLabel("Max Voltage [V]")
|
||||
l3 = QLabel("Min Temperature [°C]")
|
||||
l4 = QLabel("Max Temperature [°C]")
|
||||
popup_btn = QPushButton(self.title + " details")
|
||||
popup_btn.clicked.connect(self.show_popup)
|
||||
|
||||
l1.setAlignment(Qt.AlignLeft)
|
||||
l2.setAlignment(Qt.AlignLeft)
|
||||
@ -123,13 +129,15 @@ class StackGuiElement:
|
||||
grid = QGridLayout()
|
||||
grid.addWidget(l1, 0, 0)
|
||||
grid.addWidget(l2, 1, 0)
|
||||
grid.addWidget(l3, 0, 2)
|
||||
grid.addWidget(l4, 1, 2)
|
||||
grid.addWidget(l3, 2, 0)
|
||||
grid.addWidget(l4, 3, 0)
|
||||
|
||||
grid.addWidget(self.min_voltage_label, 0, 1)
|
||||
grid.addWidget(self.max_voltage_label, 1, 1)
|
||||
grid.addWidget(self.min_temp_label, 0, 3)
|
||||
grid.addWidget(self.max_temp_label, 1, 3)
|
||||
grid.addWidget(self.min_temp_label, 2, 1)
|
||||
grid.addWidget(self.max_temp_label, 3, 1)
|
||||
|
||||
grid.addWidget(popup_btn, 0, 2)
|
||||
|
||||
self.groupBox.setTitle(self.title)
|
||||
self.groupBox.setLayout(grid)
|
||||
@ -140,6 +148,60 @@ class StackGuiElement:
|
||||
self.min_temp_label.setNum(min(slave.cell_temps))
|
||||
self.max_temp_label.setNum(max(slave.cell_temps))
|
||||
|
||||
def show_popup(self):
|
||||
if self.detail_popup is None:
|
||||
self.detail_popup = StackPopup(self.stack_id)
|
||||
self.detail_popup.show()
|
||||
|
||||
|
||||
class StackPopup(QWidget):
|
||||
stack_id: int
|
||||
voltage_labels: list[QLabel]
|
||||
temp_labels: list[QLabel]
|
||||
|
||||
def __init__(self, stack_id: int):
|
||||
super().__init__()
|
||||
self.stack_id = stack_id
|
||||
self.voltage_labels = []
|
||||
self.temp_labels = []
|
||||
layout = QVBoxLayout()
|
||||
groupbox = QGroupBox()
|
||||
|
||||
grid = QGridLayout()
|
||||
|
||||
for i in range(len(data.slaves[stack_id].cell_voltages)):
|
||||
l1 = QLabel(f"Voltage Cell {i}")
|
||||
l2 = QLabel(f"Temperature Cell {i}")
|
||||
l1.setAlignment(Qt.AlignLeft)
|
||||
l2.setAlignment(Qt.AlignLeft)
|
||||
|
||||
l_v = QLabel()
|
||||
l_v.setNum(data.slaves[stack_id].cell_voltages[i])
|
||||
l_v.setAlignment(Qt.AlignLeft)
|
||||
self.voltage_labels.append(l_v)
|
||||
|
||||
l_t = QLabel()
|
||||
l_t.setNum(data.slaves[stack_id].cell_temps[i])
|
||||
l_t.setAlignment(Qt.AlignLeft)
|
||||
self.temp_labels.append(l_t)
|
||||
|
||||
grid.addWidget(l1, i, 0)
|
||||
grid.addWidget(l2, i, 2)
|
||||
grid.addWidget(l_v, i, 1)
|
||||
grid.addWidget(l_t, i, 3)
|
||||
|
||||
groupbox.setTitle(f"Stack {stack_id}")
|
||||
groupbox.setLayout(grid)
|
||||
layout.addWidget(groupbox)
|
||||
self.setLayout(layout)
|
||||
self.update_data()
|
||||
timer.timeout.connect(self.update_data)
|
||||
|
||||
def update_data(self):
|
||||
for i in range(len(data.slaves[self.stack_id].cell_voltages)):
|
||||
self.voltage_labels[i].setNum(data.slaves[self.stack_id].cell_voltages[i])
|
||||
self.temp_labels[i].setNum(data.slaves[self.stack_id].cell_temps[i])
|
||||
|
||||
|
||||
class Window(QWidget):
|
||||
|
||||
@ -227,7 +289,7 @@ class Window(QWidget):
|
||||
### STACKS ###
|
||||
self.stack_gui_elements = []
|
||||
for i in range(N_SLAVES):
|
||||
sge = StackGuiElement(f"Stack {i}")
|
||||
sge = StackGuiElement(f"Stack {i}", i)
|
||||
sge.update_data_from_slave(data.slaves[i])
|
||||
self.stack_gui_elements.append(sge)
|
||||
|
||||
@ -430,15 +492,16 @@ if __name__ == "__main__":
|
||||
data = AccumulatorData()
|
||||
rx_buf = bytes()
|
||||
|
||||
"""
|
||||
if len(sys.argv) != 2:
|
||||
print(f"Usage: {sys.argv[0]} SERIAL-PORT", file=sys.stderr)
|
||||
sys.exit(os.EX_USAGE)
|
||||
|
||||
SERIAL_PORT = sys.argv[1]
|
||||
print(SERIAL_PORT)
|
||||
ser = serial.Serial(SERIAL_PORT, BITRATE, timeout=TIMEOUT)
|
||||
"""
|
||||
try:
|
||||
ser = serial.Serial(SERIAL_PORT, BITRATE, timeout=TIMEOUT)
|
||||
except serial.serialutil.SerialException:
|
||||
pass
|
||||
|
||||
app = QApplication(sys.argv)
|
||||
gui = Window()
|
||||
|
Loading…
x
Reference in New Issue
Block a user