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
|
optional = false
|
||||||
python-versions = ">=3.7"
|
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]
|
[metadata]
|
||||||
lock-version = "1.1"
|
lock-version = "1.1"
|
||||||
python-versions = "^3.10"
|
python-versions = "^3.10"
|
||||||
content-hash = "ce4feb2a6a42610a01d5e986a40980aaf9f73c3fdc2368f55ec75e70f39c70cf"
|
content-hash = "9d0dcef05f7296031f76c658f997974caf9b45c1efa59678ef5823b803580e43"
|
||||||
|
|
||||||
[metadata.files]
|
[metadata.files]
|
||||||
pyqt5 = [
|
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-cp39-cp39-win_amd64.whl", hash = "sha256:42320e7a94b1085ed85d49794ed4ccfe86f1cae80b44a894db908a8aba2bc60e"},
|
||||||
{file = "PyQt5_sip-12.11.0.tar.gz", hash = "sha256:b4710fd85b57edef716cc55fae45bfd5bfac6fc7ba91036f1dcc3f331ca0eb39"},
|
{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]
|
[tool.poetry.dependencies]
|
||||||
python = "^3.10"
|
python = "^3.10"
|
||||||
PyQt5 = "^5.15.7"
|
PyQt5 = "^5.15.7"
|
||||||
|
pyserial = "^3.5"
|
||||||
|
|
||||||
[tool.poetry.dev-dependencies]
|
[tool.poetry.dev-dependencies]
|
||||||
|
|
||||||
|
81
test.py
81
test.py
@ -89,19 +89,23 @@ class AccumulatorData:
|
|||||||
|
|
||||||
class StackGuiElement:
|
class StackGuiElement:
|
||||||
title: str
|
title: str
|
||||||
|
stack_id: int
|
||||||
min_voltage_label: QLabel
|
min_voltage_label: QLabel
|
||||||
max_voltage_label: QLabel
|
max_voltage_label: QLabel
|
||||||
min_temp_label: QLabel
|
min_temp_label: QLabel
|
||||||
max_temp_label: QLabel
|
max_temp_label: QLabel
|
||||||
groupBox: QGroupBox
|
groupBox: QGroupBox
|
||||||
|
detail_popup: QWidget
|
||||||
|
|
||||||
def __init__(self, title: str):
|
def __init__(self, title: str, stack_id: int):
|
||||||
self.title = title
|
self.title = title
|
||||||
|
self.stack_id = stack_id
|
||||||
self.min_voltage_label = QLabel()
|
self.min_voltage_label = QLabel()
|
||||||
self.max_voltage_label = QLabel()
|
self.max_voltage_label = QLabel()
|
||||||
self.min_temp_label = QLabel()
|
self.min_temp_label = QLabel()
|
||||||
self.max_temp_label = QLabel()
|
self.max_temp_label = QLabel()
|
||||||
self.groupBox = QGroupBox()
|
self.groupBox = QGroupBox()
|
||||||
|
self.detail_popup = None
|
||||||
self.__post__init__()
|
self.__post__init__()
|
||||||
|
|
||||||
def __post__init__(self):
|
def __post__init__(self):
|
||||||
@ -109,6 +113,8 @@ class StackGuiElement:
|
|||||||
l2 = QLabel("Max Voltage [V]")
|
l2 = QLabel("Max Voltage [V]")
|
||||||
l3 = QLabel("Min Temperature [°C]")
|
l3 = QLabel("Min Temperature [°C]")
|
||||||
l4 = QLabel("Max Temperature [°C]")
|
l4 = QLabel("Max Temperature [°C]")
|
||||||
|
popup_btn = QPushButton(self.title + " details")
|
||||||
|
popup_btn.clicked.connect(self.show_popup)
|
||||||
|
|
||||||
l1.setAlignment(Qt.AlignLeft)
|
l1.setAlignment(Qt.AlignLeft)
|
||||||
l2.setAlignment(Qt.AlignLeft)
|
l2.setAlignment(Qt.AlignLeft)
|
||||||
@ -123,13 +129,15 @@ class StackGuiElement:
|
|||||||
grid = QGridLayout()
|
grid = QGridLayout()
|
||||||
grid.addWidget(l1, 0, 0)
|
grid.addWidget(l1, 0, 0)
|
||||||
grid.addWidget(l2, 1, 0)
|
grid.addWidget(l2, 1, 0)
|
||||||
grid.addWidget(l3, 0, 2)
|
grid.addWidget(l3, 2, 0)
|
||||||
grid.addWidget(l4, 1, 2)
|
grid.addWidget(l4, 3, 0)
|
||||||
|
|
||||||
grid.addWidget(self.min_voltage_label, 0, 1)
|
grid.addWidget(self.min_voltage_label, 0, 1)
|
||||||
grid.addWidget(self.max_voltage_label, 1, 1)
|
grid.addWidget(self.max_voltage_label, 1, 1)
|
||||||
grid.addWidget(self.min_temp_label, 0, 3)
|
grid.addWidget(self.min_temp_label, 2, 1)
|
||||||
grid.addWidget(self.max_temp_label, 1, 3)
|
grid.addWidget(self.max_temp_label, 3, 1)
|
||||||
|
|
||||||
|
grid.addWidget(popup_btn, 0, 2)
|
||||||
|
|
||||||
self.groupBox.setTitle(self.title)
|
self.groupBox.setTitle(self.title)
|
||||||
self.groupBox.setLayout(grid)
|
self.groupBox.setLayout(grid)
|
||||||
@ -140,6 +148,60 @@ class StackGuiElement:
|
|||||||
self.min_temp_label.setNum(min(slave.cell_temps))
|
self.min_temp_label.setNum(min(slave.cell_temps))
|
||||||
self.max_temp_label.setNum(max(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):
|
class Window(QWidget):
|
||||||
|
|
||||||
@ -227,7 +289,7 @@ class Window(QWidget):
|
|||||||
### STACKS ###
|
### STACKS ###
|
||||||
self.stack_gui_elements = []
|
self.stack_gui_elements = []
|
||||||
for i in range(N_SLAVES):
|
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])
|
sge.update_data_from_slave(data.slaves[i])
|
||||||
self.stack_gui_elements.append(sge)
|
self.stack_gui_elements.append(sge)
|
||||||
|
|
||||||
@ -430,15 +492,16 @@ if __name__ == "__main__":
|
|||||||
data = AccumulatorData()
|
data = AccumulatorData()
|
||||||
rx_buf = bytes()
|
rx_buf = bytes()
|
||||||
|
|
||||||
"""
|
|
||||||
if len(sys.argv) != 2:
|
if len(sys.argv) != 2:
|
||||||
print(f"Usage: {sys.argv[0]} SERIAL-PORT", file=sys.stderr)
|
print(f"Usage: {sys.argv[0]} SERIAL-PORT", file=sys.stderr)
|
||||||
sys.exit(os.EX_USAGE)
|
sys.exit(os.EX_USAGE)
|
||||||
|
|
||||||
SERIAL_PORT = sys.argv[1]
|
SERIAL_PORT = sys.argv[1]
|
||||||
print(SERIAL_PORT)
|
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)
|
app = QApplication(sys.argv)
|
||||||
gui = Window()
|
gui = Window()
|
||||||
|
Loading…
x
Reference in New Issue
Block a user