forked from M-Labs/thermostat
ctrl_panel: Remove MutexParameter
Use the standard ListParamenter instead, and hook up UI changes and sent commands elsewhere.
This commit is contained in:
parent
fb977982f8
commit
8b68ff7652
@ -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
|
||||
|
@ -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": [
|
||||
|
@ -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):
|
||||
|
Loading…
Reference in New Issue
Block a user