ctrl_panel: Remove MutexParameter

Use the standard ListParamenter instead, and hook up UI changes and
sent commands elsewhere.
This commit is contained in:
atse 2024-07-18 13:38:46 +08:00
parent fb977982f8
commit 8b68ff7652
3 changed files with 18 additions and 38 deletions

View File

@ -7,42 +7,6 @@ from pyqtgraph.parametertree import (
import pytec.gui.view.unitful
class MutexParameter(pTypes.ListParameter):
"""
Mutually exclusive parameter where only one of its children is visible at a time, list selectable.
The ordering of the list items determines which children will be visible.
"""
def __init__(self, **opts):
super().__init__(**opts)
self.sigValueChanged.connect(self.show_chosen_child)
self.sigValueChanged.emit(self, self.opts["value"])
def _get_param_from_value(self, value):
if isinstance(self.opts["limits"], dict):
values_list = list(self.opts["limits"].values())
else:
values_list = self.opts["limits"]
return self.children()[values_list.index(value)]
@pyqtSlot(object, object)
def show_chosen_child(self, value):
for param in self.children():
param.hide()
child_to_show = self._get_param_from_value(value.value())
child_to_show.show()
if child_to_show.opts.get("triggerOnShow", None):
child_to_show.sigValueChanged.emit(child_to_show, child_to_show.value())
registerParameterType("mutex", MutexParameter)
def set_tree_label_tips(tree):
for item in tree.listAllItems():
p = item.param
@ -89,6 +53,18 @@ class CtrlPanel(QObject):
for handle in sigActivated_handles[ch]:
param.child(*handle[0]).sigActivated.connect(handle[1])
param.child("output", "control_method").sigValueChanged.connect(
lambda param, value: param.child("i_set").show(
value == "constant_current"
)
)
param.child("output", "control_method").sigValueChanged.connect(
lambda param, value: param.child("target").show(
value == "temperature_pid"
)
)
def _setValue(self, value, blockSignal=None):
"""
Implement 'lock' mechanism for Parameter Type

View File

@ -29,7 +29,7 @@
{
"name": "control_method",
"title": "Control Method",
"type": "mutex",
"type": "list",
"limits": {
"Constant Current": "constant_current",
"Temperature PID": "temperature_pid"
@ -54,7 +54,6 @@
-2,
2
],
"triggerOnShow": true,
"decimals": 6,
"pinSiPrefix": "m",
"suffix": "A",
@ -73,6 +72,7 @@
"name": "target",
"title": "Setpoint",
"type": "float",
"visible": false,
"value": 25,
"step": 0.1,
"limits": [

View File

@ -293,6 +293,10 @@ class MainWindow(QtWidgets.QMainWindow):
if activater[1] == "ch":
activater[1] = ch
await self.client.set_param(*activater)
else:
await self.client.set_param(
"pwm", ch, "i_set", inner_param.child("i_set").value()
)
@asyncSlot()
async def pid_autotune_request(self, ch=0):