pymodaq 5.0.0__py3-none-any.whl → 5.0.2__py3-none-any.whl

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.

Potentially problematic release.


This version of pymodaq might be problematic. Click here for more details.

Files changed (63) hide show
  1. pymodaq/__init__.py +55 -89
  2. pymodaq/control_modules/daq_move.py +129 -55
  3. pymodaq/control_modules/daq_move_ui.py +42 -11
  4. pymodaq/control_modules/daq_viewer.py +32 -13
  5. pymodaq/control_modules/move_utility_classes.py +346 -79
  6. pymodaq/control_modules/utils.py +26 -9
  7. pymodaq/control_modules/viewer_utility_classes.py +51 -14
  8. pymodaq/daq_utils/daq_utils.py +6 -0
  9. pymodaq/dashboard.py +532 -263
  10. pymodaq/examples/qt_less_standalone_module.py +128 -0
  11. pymodaq/extensions/bayesian/bayesian_optimisation.py +30 -21
  12. pymodaq/extensions/bayesian/utils.py +6 -3
  13. pymodaq/extensions/daq_logger/__init__.py +1 -0
  14. pymodaq/extensions/daq_logger/daq_logger.py +4 -5
  15. pymodaq/extensions/daq_scan.py +28 -8
  16. pymodaq/extensions/daq_scan_ui.py +7 -9
  17. pymodaq/extensions/pid/__init__.py +0 -1
  18. pymodaq/extensions/pid/actuator_controller.py +13 -0
  19. pymodaq/extensions/pid/daq_move_PID.py +25 -46
  20. pymodaq/extensions/pid/pid_controller.py +49 -41
  21. pymodaq/extensions/pid/utils.py +7 -31
  22. pymodaq/extensions/utils.py +41 -7
  23. pymodaq/post_treatment/load_and_plot.py +43 -10
  24. pymodaq/resources/setup_plugin.py +1 -0
  25. pymodaq/updater.py +107 -0
  26. pymodaq/utils/chrono_timer.py +6 -7
  27. pymodaq/utils/daq_utils.py +6 -3
  28. pymodaq/utils/data.py +21 -17
  29. pymodaq/utils/enums.py +6 -0
  30. pymodaq/utils/gui_utils/loader_utils.py +29 -2
  31. pymodaq/utils/gui_utils/utils.py +9 -12
  32. pymodaq/utils/gui_utils/widgets/lcd.py +8 -0
  33. pymodaq/utils/h5modules/module_saving.py +5 -2
  34. pymodaq/utils/leco/daq_move_LECODirector.py +22 -16
  35. pymodaq/utils/leco/daq_xDviewer_LECODirector.py +15 -9
  36. pymodaq/utils/leco/leco_director.py +4 -3
  37. pymodaq/utils/leco/pymodaq_listener.py +9 -13
  38. pymodaq/utils/leco/utils.py +40 -7
  39. pymodaq/utils/managers/modules_manager.py +22 -12
  40. pymodaq/utils/managers/overshoot_manager.py +45 -1
  41. pymodaq/utils/managers/preset_manager.py +22 -46
  42. pymodaq/utils/managers/preset_manager_utils.py +17 -13
  43. pymodaq/utils/managers/remote_manager.py +1 -1
  44. pymodaq/utils/messenger.py +6 -0
  45. pymodaq/utils/parameter/__init__.py +5 -1
  46. pymodaq/utils/tcp_ip/mysocket.py +4 -110
  47. pymodaq/utils/tcp_ip/serializer.py +4 -769
  48. pymodaq/utils/tcp_ip/tcp_server_client.py +5 -5
  49. pymodaq-5.0.2.dist-info/METADATA +242 -0
  50. {pymodaq-5.0.0.dist-info → pymodaq-5.0.2.dist-info}/RECORD +54 -55
  51. {pymodaq-5.0.0.dist-info → pymodaq-5.0.2.dist-info}/WHEEL +1 -1
  52. {pymodaq-5.0.0.dist-info → pymodaq-5.0.2.dist-info}/entry_points.txt +1 -0
  53. pymodaq/examples/custom_app.py +0 -255
  54. pymodaq/examples/custom_viewer.py +0 -112
  55. pymodaq/examples/parameter_ex.py +0 -158
  56. pymodaq/examples/preset_MockCamera.xml +0 -1
  57. pymodaq/post_treatment/daq_measurement/daq_measurement_GUI.py +0 -142
  58. pymodaq/post_treatment/daq_measurement/daq_measurement_GUI.ui +0 -232
  59. pymodaq/post_treatment/daq_measurement/daq_measurement_main.py +0 -391
  60. pymodaq/post_treatment/daq_measurement/process_from_QtDesigner_DAQ_Measurement_GUI.bat +0 -2
  61. pymodaq-5.0.0.dist-info/METADATA +0 -166
  62. /pymodaq/{post_treatment/daq_measurement → daq_utils}/__init__.py +0 -0
  63. {pymodaq-5.0.0.dist-info → pymodaq-5.0.2.dist-info}/licenses/LICENSE +0 -0
@@ -1,255 +0,0 @@
1
-
2
- import datetime
3
-
4
- from qtpy import QtWidgets
5
- from qtpy.QtCore import Slot, QDate, QThread
6
-
7
- from pymodaq_utils.config import Config
8
- from pymodaq_utils.logger import set_logger, get_module_name
9
- from pymodaq_gui.utils.custom_app import CustomApp
10
- from pymodaq_gui.utils.dock import DockArea, Dock
11
- from pymodaq_gui.utils.file_io import select_file
12
- from pymodaq_gui.parameter import ioxml
13
- from pymodaq_gui.plotting.data_viewers.viewer0D import Viewer0D
14
- from pymodaq_gui.h5modules.browsing import H5Browser
15
- from pymodaq_gui.h5modules.saving import H5Saver
16
- from pymodaq_data.h5modules.data_saving import DataToExportSaver
17
- from pymodaq_data.data import DataToExport
18
-
19
- from pymodaq.control_modules.daq_viewer import DAQ_Viewer
20
-
21
-
22
- config = Config()
23
- logger = set_logger(get_module_name(__file__))
24
-
25
-
26
- class CustomAppExample(CustomApp):
27
-
28
- # list of dicts enabling the settings tree on the user interface
29
- params = [
30
- {'title': 'Main settings:', 'name': 'main_settings', 'type': 'group', 'children': [
31
- {'title': 'Save base path:', 'name': 'base_path', 'type': 'browsepath',
32
- 'value': config('data_saving', 'h5file', 'save_path')},
33
- {'title': 'File name:', 'name': 'target_filename', 'type': 'str', 'value': "", 'readonly': True},
34
- {'title': 'Date:', 'name': 'date', 'type': 'date', 'value': QDate.currentDate()},
35
- {'title': 'Do something, such as showing data:', 'name': 'do_something', 'type': 'bool', 'value': False},
36
- {'title': 'Something done:', 'name': 'something_done', 'type': 'led', 'value': False, 'readonly': True},
37
- {'title': 'Infos:', 'name': 'info', 'type': 'text', 'value': ""},
38
- {'title': 'push:', 'name': 'push', 'type': 'bool_push', 'value': False}
39
- ]},
40
- {'title': 'Other settings:', 'name': 'other_settings', 'type': 'group', 'children': [
41
- {'title': 'List of stuffs:', 'name': 'list_stuff', 'type': 'list', 'value': 'first',
42
- 'limits': ['first', 'second', 'third'], 'tip': 'choose a stuff from the list'},
43
- {'title': 'List of integers:', 'name': 'list_int', 'type': 'list', 'value': 0,
44
- 'limits': [0, 256, 512], 'tip': 'choose a stuff from this int list'},
45
- {'title': 'one integer:', 'name': 'an_integer', 'type': 'int', 'value': 500, },
46
- {'title': 'one float:', 'name': 'a_float', 'type': 'float', 'value': 2.7, },
47
- ]},
48
- ]
49
-
50
- def __init__(self, dockarea):
51
-
52
- super().__init__(dockarea)
53
-
54
- # init the object parameters
55
- self.raw_data: DataToExport = None
56
- self.setup_ui()
57
-
58
- def setup_actions(self):
59
- '''
60
- subclass method from ActionManager
61
- '''
62
- logger.debug('setting actions')
63
- self.add_action('quit', 'Quit', 'close2', "Quit program", toolbar=self.toolbar)
64
- self.add_action('grab', 'Grab', 'camera', "Grab from camera", checkable=True, toolbar=self.toolbar)
65
- self.add_action('load', 'Load', 'Open', "Load target file (.h5, .png, .jpg) or data from camera",
66
- checkable=False, toolbar=self.toolbar)
67
- self.add_action('save', 'Save', 'SaveAs', "Save current data", checkable=False, toolbar=self.toolbar)
68
- self.add_action('show', 'Show/hide', 'read2', "Show Hide DAQViewer", checkable=True, toolbar=self.toolbar)
69
-
70
- logger.debug('actions set')
71
-
72
- def setup_docks(self):
73
- '''
74
- subclass method from CustomApp
75
- '''
76
- logger.debug('setting docks')
77
- self.dock_settings = Dock('Settings', size=(350, 350))
78
- self.dockarea.addDock(self.dock_settings, 'left')
79
- self.dock_settings.addWidget(self.settings_tree, 10)
80
-
81
- self.dock_logger = Dock("Logger")
82
- self.logger_list = QtWidgets.QListWidget()
83
- self.logger_list.setMinimumWidth(300)
84
- self.dock_logger.addWidget(self.logger_list)
85
- self.dockarea.addDock(self.dock_logger, 'bottom', self.dock_settings)
86
-
87
- # create a dock containing a viewer object, could be 0D, 1D or 2D depending what kind of data one want to plot here a 0D
88
- dock_Viewer0D = Dock('Viewer dock', size=(350, 350))
89
- self.dockarea.addDock(dock_Viewer0D, 'right', self.dock_logger)
90
- target_widget = QtWidgets.QWidget()
91
- self.target_viewer = Viewer0D(target_widget)
92
- dock_Viewer0D.addWidget(target_widget)
93
-
94
- # create 2 docks to display the DAQ_Viewer (one for its settings, one for its viewer)
95
- self.dock_detector_settings = Dock("Detector Settings", size=(350, 350))
96
- self.dockarea.addDock(self.dock_detector_settings, 'right', self.dock_settings)
97
- self.dock_detector = Dock("Detector Viewer", size=(350, 350))
98
- self.dockarea.addDock(self.dock_detector, 'right', self.dock_detector_settings)
99
- # init one daq_viewer object named detector
100
-
101
- self.detector = DAQ_Viewer(self.dockarea, dock_settings=self.dock_detector_settings,
102
- dock_viewer=self.dock_detector, title="A detector")
103
- # set its type to 'Mock'
104
- self.detector.daq_type = 'DAQ0D'
105
- self.detector.detector = 'Mock'
106
- # init the detector and wait 1000ms for the completion
107
- self.detector.init_hardware()
108
- self.detector.settings.child('main_settings', 'wait_time').setValue(100)
109
- QtWidgets.QApplication.processEvents()
110
- QThread.msleep(1000)
111
-
112
- logger.debug('docks are set')
113
-
114
- def connect_things(self):
115
- '''
116
- subclass method from CustomApp
117
- '''
118
- logger.debug('connecting things')
119
- self.log_signal[str].connect(self.add_log) # connect together this custom signal with the add_log method
120
-
121
- self.detector.grab_done_signal.connect(self.data_done)
122
- self.connect_action('quit', self.quit_function)
123
- self.connect_action('load', self.load_file)
124
- self.connect_action('save', self.save_data)
125
-
126
- self.connect_action('grab', self.detector.grab)
127
- self.connect_action('show', self.show_detector)
128
- logger.debug('connecting done')
129
-
130
- def show_detector(self, status):
131
- self.dock_detector.setVisible(status)
132
- self.dock_detector_settings.setVisible(status)
133
-
134
- def setup_menu(self):
135
- '''
136
- subclass method from CustomApp
137
- '''
138
- logger.debug('settings menu')
139
- file_menu = self.mainwindow.menuBar().addMenu('File')
140
- self.affect_to('quit', file_menu)
141
- file_menu.addSeparator()
142
- self.affect_to('load', file_menu)
143
- self.affect_to('save', file_menu)
144
-
145
- self.affect_to('quit', file_menu)
146
-
147
- logger.debug('menu set')
148
-
149
- def value_changed(self, param):
150
- logger.debug(f'calling value_changed with param {param.name()}')
151
- if param.name() == 'do_something':
152
- if param.value():
153
- self.log_signal.emit('Do something')
154
- self.detector.grab_done_signal.connect(self.show_data)
155
- self.raw_data = [] # init the data to be finally saved
156
- self.settings.child('main_settings', 'something_done').setValue(True)
157
- else:
158
- self.log_signal.emit('Stop Doing something')
159
- self.detector.grab_done_signal.disconnect()
160
- self.settings.child('main_settings', 'something_done').setValue(False)
161
-
162
- logger.debug(f'Value change applied')
163
-
164
- def data_done(self, data):
165
- # print(data)
166
- pass
167
-
168
- def show_data(self, data: DataToExport):
169
- """
170
- do stuff with data from the detector if its grab_done_signal has been connected
171
- Parameters
172
- ----------
173
- data: DataToExport
174
- """
175
- self.raw_data = data
176
- data0D = data.get_data_from_dim('Data0D')
177
-
178
- self.target_viewer.show_data(data0D.data[0])
179
-
180
- def load_file(self):
181
- # init the data browser module
182
- widg = QtWidgets.QWidget()
183
- self.data_browser = H5Browser(widg)
184
- widg.show()
185
-
186
- def quit_function(self):
187
- # close all stuff that need to be
188
- self.detector.quit_fun()
189
- QtWidgets.QApplication.processEvents()
190
- self.mainwindow.close()
191
-
192
- def run_detector(self):
193
- self.detector.ui.grab_pb.click()
194
-
195
- def save_data(self):
196
- try:
197
- path = select_file(start_path=self.settings.child('main_settings', 'base_path').value(), save=True,
198
- ext='h5')
199
- if path is not None:
200
- # init the file object with an addhoc name given by the user
201
- h5saver = H5Saver(save_type='custom')
202
- h5saver.init_file(update_h5=True, addhoc_file_path=path)
203
- datasaver = DataToExportSaver(h5saver)
204
-
205
-
206
- # save all metadata
207
- settings_str = ioxml.parameter_to_xml_string(self.settings)
208
- settings_str = b'<All_settings>' + settings_str
209
- settings_str += ioxml.parameter_to_xml_string(self.detector.settings) + ioxml.parameter_to_xml_string(
210
- h5saver.settings) + b'</All_settings>'
211
-
212
- datasaver.add_data(h5saver.root(), self.raw_data, settings_as_xml=settings_str)
213
-
214
- h5saver.close_file()
215
-
216
- st = 'file {:s} has been saved'.format(str(path))
217
- self.add_log(st)
218
- self.settings.child('main_settings', 'info').setValue(st)
219
-
220
- except Exception as e:
221
- logger.exception(str(e))
222
-
223
- @Slot(str)
224
- def add_log(self, txt):
225
- """
226
- Add a log to the logger list from the given text log and the current time
227
-
228
- ================ ========= ======================
229
- **Parameters** **Type** **Description**
230
-
231
- *txt* string the log to be added
232
- ================ ========= ======================
233
-
234
- """
235
- now = datetime.datetime.now()
236
- new_item = QtWidgets.QListWidgetItem(str(now) + ": " + txt)
237
- self.logger_list.addItem(new_item)
238
- logger.info(txt)
239
-
240
-
241
- def main():
242
- import sys
243
- app = QtWidgets.QApplication(sys.argv)
244
- mainwindow = QtWidgets.QMainWindow()
245
- dockarea = DockArea()
246
- mainwindow.setCentralWidget(dockarea)
247
-
248
- prog = CustomAppExample(dockarea)
249
-
250
- mainwindow.show()
251
- sys.exit(app.exec_())
252
-
253
-
254
- if __name__ == '__main__':
255
- main()
@@ -1,112 +0,0 @@
1
- from pymodaq_gui.utils.widgets.table import SpinBoxDelegate
2
- from pymodaq_gui.parameter.utils import get_widget_from_tree
3
- from pymodaq_gui.plotting.data_viewers.viewer2D import Viewer2D
4
- from pymodaq.utils import gui_utils as gutils
5
- from pymodaq_gui.utils import Dock
6
- from pymodaq_gui.parameter import ParameterTree, Parameter
7
- from pymodaq_gui.parameter.pymodaq_ptypes.tableview import TableViewCustom
8
- from pymodaq.utils.scanner.scanners.tabular import TableModelTabular
9
- from qtpy.QtCore import QObject, Qt, Slot
10
- from qtpy import QtWidgets
11
-
12
-
13
- class ViewerPointList(QObject):
14
- def __init__(self, area):
15
- super().__init__()
16
- self.area = area
17
- self.viewer: Viewer2D = None
18
-
19
- self.set_viewer()
20
- self.set_point_list()
21
- self.viewer.sig_double_clicked.connect(self.double_click_action)
22
-
23
- @Slot(float, float)
24
- def double_click_action(self, posx, posy):
25
- xs, ys = self.viewer.view.unscale_axis(posx, posy)
26
- data_at = self.viewer.view.get_data_at('red', (xs, ys))
27
- if data_at is not None:
28
- self.table_model.add_data(self.table_view.currentIndex().row() + 1, [posx, posy, data_at])
29
-
30
- def show_data(self, data):
31
- self.viewer.show_data(data)
32
-
33
- def setXaxis(self, xaxis):
34
- self.viewer.x_axis = xaxis
35
-
36
- def setYaxis(self, yaxis):
37
- self.viewer.y_axis = yaxis
38
-
39
- def set_viewer(self):
40
- dock_viewer = Dock('Viewer2D')
41
- self.area.addDock(dock_viewer, 'right')
42
- widget = QtWidgets.QWidget()
43
- self.viewer = Viewer2D(widget)
44
- dock_viewer.addWidget(widget)
45
-
46
- def set_point_list(self):
47
- dock_list = Dock('List of points')
48
- self.area.addDock(dock_list, 'right')
49
- params = [{'title': 'Positions', 'name': 'tabular_table', 'type': 'table_view',
50
- 'delegate': SpinBoxDelegate, 'menu': True}, ]
51
- self.settings_tree = ParameterTree()
52
- self.settings = Parameter.create(name='settings', title='Settings', type='group', children=params)
53
- self.settings_tree.setParameters(self.settings, showTop=False)
54
- dock_list.addWidget(self.settings_tree)
55
-
56
- init_data = [[0., 0., 0.]]
57
- self.table_model = TableModelTabular(init_data, ['x', 'y', 'data'])
58
- self.table_view = get_widget_from_tree(self.settings_tree, TableViewCustom)[0]
59
- self.settings.child(('tabular_table')).setValue(self.table_model)
60
-
61
- self.table_view.horizontalHeader().ResizeMode(QtWidgets.QHeaderView.ResizeToContents)
62
- self.table_view.horizontalHeader().setStretchLastSection(True)
63
- self.table_view.setSelectionBehavior(QtWidgets.QTableView.SelectRows)
64
- self.table_view.setSelectionMode(QtWidgets.QTableView.SingleSelection)
65
- styledItemDelegate = QtWidgets.QStyledItemDelegate()
66
- styledItemDelegate.setItemEditorFactory(SpinBoxDelegate())
67
- self.table_view.setItemDelegate(styledItemDelegate)
68
-
69
- self.table_view.setDragEnabled(True)
70
- self.table_view.setDropIndicatorShown(True)
71
- self.table_view.setAcceptDrops(True)
72
- self.table_view.viewport().setAcceptDrops(True)
73
- self.table_view.setDefaultDropAction(Qt.MoveAction)
74
- self.table_view.setDragDropMode(QtWidgets.QTableView.InternalMove)
75
- self.table_view.setDragDropOverwriteMode(False)
76
-
77
- self.table_view.add_data_signal[int].connect(self.table_model.add_data)
78
- self.table_view.remove_row_signal[int].connect(self.table_model.remove_data)
79
- self.table_view.load_data_signal.connect(self.table_model.load_txt)
80
- self.table_view.save_data_signal.connect(self.table_model.save_txt)
81
-
82
-
83
- if __name__ == '__main__':
84
- from pymodaq.utils.gui_utils import DockArea
85
- from pymodaq.utils.data import Axis, DataFromPlugins
86
- import sys
87
- import numpy as np
88
-
89
- app = QtWidgets.QApplication(sys.argv)
90
- area = DockArea()
91
- win = QtWidgets.QMainWindow()
92
- win.setCentralWidget(area)
93
- viewer = ViewerPointList(area)
94
-
95
- Nx = 100
96
- Ny = 200
97
- x = (np.linspace(0, Nx - 1, Nx) + 100) / 2
98
- y = (np.linspace(0, Ny - 1, Ny) - 10) * 2
99
- from pymodaq.utils.math_utils import gauss2D
100
-
101
- data_red = 3 * gauss2D(x, np.mean(x), (np.max(x)-np.min(x)) / 5, y, np.mean(y), (np.max(y)-np.min(y)) / 5, 1)
102
- data_red += np.random.random(data_red.shape)
103
- data_to_plot = DataFromPlugins(name='mydata', distribution='uniform', data=[data_red],
104
- axes=[Axis('xaxis', units='xpxl', data=x, index=1),
105
- Axis('yaxis', units='ypxl', data=y, index=0), ])
106
-
107
- viewer.show_data(data_to_plot)
108
- viewer.setXaxis(Axis(data=x, label='This is x axis', units='au'))
109
- viewer.setYaxis(Axis(data=y, label='This is y axis', units='au'))
110
- win.show()
111
- app.processEvents()
112
- sys.exit(app.exec_())
@@ -1,158 +0,0 @@
1
- """
2
- S Weber 2020
3
- Examples of custome parameter types derived from pyqtgraph
4
- """
5
- import sys
6
-
7
- import pymodaq_gui.utils.widgets.table
8
- from qtpy import QtWidgets, QtCore
9
-
10
- from collections import OrderedDict
11
- from pymodaq_gui.managers.parameter_manager import ParameterManager
12
-
13
-
14
- class ParameterEx(ParameterManager):
15
- params = [
16
- {'title': 'Groups:', 'name': 'groups', 'type': 'group', 'children': [
17
- {'title': 'A visible group:', 'name': 'agroup', 'type': 'group', 'children': []},
18
- {'title': 'An hidden group:', 'name': 'bgroup', 'type': 'group', 'children': [],
19
- 'visible': False}, # this
20
- # visible option is not available in usual pyqtgraph group
21
- ]},
22
-
23
- {'title': 'Numbers:', 'name': 'numbers', 'type': 'group', 'children': [
24
- {'title': 'Standard float', 'name': 'afloat', 'type': 'float', 'value': 20., 'min': 1.,
25
- 'tip': 'displays this text as a tooltip'},
26
- {'title': 'Linear Slide float', 'name': 'linearslidefloat', 'type': 'slide',
27
- 'value': 50, 'default': 50,
28
- 'min': 0,
29
- 'max': 123, 'subtype': 'linear'},
30
- {'title': 'Linear int Slide', 'name': 'linearslideint', 'type': 'slide',
31
- 'value': 50, 'default': 50, 'step':1,
32
- 'min': 0,
33
- 'max': 123, 'subtype': 'linear', 'int': True},
34
- {'title': 'Linear Slide with suffix', 'name': 'linearslidewithsuffixandsiPrefix',
35
- 'type': 'slide', 'value': 50, 'default': 50,
36
- 'min': 0,
37
- 'max': 1e6, 'subtype': 'linear','suffix':'V','siPrefix':True},
38
- {'title': 'Log Slide float', 'name': 'logslidefloat', 'type': 'slide',
39
- 'value': 50, 'default': 50,
40
- 'min': 1e-5,
41
- 'max': 1e5, 'subtype': 'log','suffix':'V','siPrefix':True},
42
- ]},
43
-
44
- {'title': 'Booleans:', 'name': 'booleans', 'type': 'group', 'children': [
45
- {'title': 'Standard bool', 'name': 'abool', 'type': 'bool', 'value': True},
46
- {'title': 'bool push', 'name': 'aboolpush', 'type': 'bool_push', 'value': True,
47
- 'label': 'action'},
48
- {'title': 'A led', 'name': 'aled', 'type': 'led', 'value': False,
49
- 'tip': 'a led you cannot toggle'},
50
- {'title': 'A led', 'name': 'anotherled', 'type': 'led_push', 'value': True,
51
- 'tip': 'a led you can toggle'},
52
- ]},
53
-
54
- {'title': 'DateTime:', 'name': 'datetimes', 'type': 'group', 'children': [
55
- {'title': 'Time:', 'name': 'atime', 'type': 'time',
56
- 'value': QtCore.QTime.currentTime()},
57
- {'title': 'Date:', 'name': 'adate', 'type': 'date',
58
- 'value': QtCore.QDate.currentDate(),
59
- 'format': 'dd/MM/yyyy'},
60
- {'title': 'DateTime:', 'name': 'adatetime', 'type': 'date_time',
61
- 'value': QtCore.QDateTime(QtCore.QDate.currentDate(), QtCore.QTime.currentTime()),
62
- 'format': 'MM/dd/yyyy hh:mm', 'tip': 'displays this text as a tooltip'},
63
- ]},
64
- {'title': 'An action', 'name': 'action', 'type': 'action'},
65
- # action whose displayed text corresponds to title
66
-
67
- {'title': 'Lists:', 'name': 'lists', 'type': 'group', 'children': [
68
- {'title': 'Standard list:', 'name': 'alist', 'type': 'list',
69
- 'limits': ['a value', 'another one'], 'value': 'a value'},
70
- {'title': 'List with add:', 'name': 'anotherlist', 'type': 'list',
71
- 'limits': ['a value', 'another one'], 'value': 'a value',
72
- 'show_pb': True,
73
- 'tip': 'when using the "show_pb" option, displays a plus '
74
- 'button to add elt to the list'},
75
- {'title': 'List defined from a dict:', 'name': 'dict_list', 'type': 'list',
76
- 'limits': {'xaxis': 0, 'yaxis': [0, 1, 2]},
77
- 'value': 'yaxis',
78
- 'tip': 'Such a parameter display text that are keys of a dict while'
79
- 'values could be any object'
80
- },
81
- ]},
82
- {'title': 'Browsing files:', 'name': 'browser', 'type': 'group', 'children': [
83
- {'title': 'Look for a file:', 'name': 'afile', 'type': 'browsepath', 'value': '',
84
- 'filetype': True,
85
- 'tip': 'If filetype is True select a file otherwise a directory'},
86
- {'title': 'Look for a dir:', 'name': 'adir', 'type': 'browsepath', 'value': '',
87
- 'filetype': False,
88
- 'tip': 'If filetype is True select a file otherwise a directory'},
89
-
90
- ]},
91
- {'title': 'Selectable items:', 'name': 'itemss', 'type': 'group', 'children': [
92
- {'title': 'Selectable items', 'name': 'items', 'type': 'itemselect',
93
- 'value': dict(all_items=['item1', 'item2', 'item3'], selected=['item2']),
94
- 'tip': 'Press Ctrl+click to select items in any order'},
95
- {'title': 'Selectable items', 'name': 'itemsbis', 'type': 'itemselect',
96
- 'value': dict(all_items=['item1', 'item2', 'item3'], selected=['item2']),
97
- 'tip': 'If show_pb is True, user can add items to the list', 'show_pb': True,},
98
- {'title': 'Removable items', 'name': 'itemsbisbis', 'type': 'itemselect',
99
- 'value': dict(all_items=['item1', 'item2', 'item3'], selected=['item2']),
100
- 'tip': 'If show_mb is True, user can remove selected items from the list',
101
- 'show_mb': True,},
102
- {'title': 'Checkable items', 'name': 'itemscheckable', 'type': 'itemselect',
103
- 'value': dict(all_items=['item1', 'item2', 'item3'], selected=['item2']),
104
- 'tip': 'If checkbox is True, user can select item by checking/unchecking items.'
105
- ' Remove items is still used with standard selections',
106
- 'show_pb': True, 'checkbox': True, 'show_mb': True,},
107
- {'title': 'Dragable items', 'name': 'itemsdragablecheckable', 'type': 'itemselect',
108
- 'value': dict(all_items=['item1', 'item2', 'item3'], selected=['item2']),
109
- 'tip': 'If dragdrop is True, user can drag or drop items inside the list',
110
- 'checkbox': True, 'dragdrop': True},
111
- ]},
112
- {'title': 'Plain text:', 'name': 'texts', 'type': 'group', 'children': [
113
- {'title': 'Standard str', 'name': 'atte', 'type': 'str',
114
- 'value': 'this is a string you can edit'},
115
- {'title': 'Plain text', 'name': 'text', 'type': 'text', 'value': 'this is some text'},
116
- {'title': 'Plain text', 'name': 'textpb', 'type': 'text_pb',
117
- 'value': 'this is some text',
118
- 'tip': 'If text_pb type is used, user can add text to the parameter'},
119
- ]},
120
-
121
- {'title': 'Tables:', 'name': 'tables', 'type': 'group', 'children': [
122
- {'title': 'Table widget', 'name': 'tablewidget', 'type': 'table', 'value':
123
- OrderedDict(key1='data1', key2=24), 'header': ['keys', 'limits'], 'height': 100},
124
- {'title': 'Table view', 'name': 'tabular_table', 'type': 'table_view',
125
- 'delegate': pymodaq_gui.utils.widgets.table.SpinBoxDelegate, 'menu': True,
126
- 'value': pymodaq_gui.utils.widgets.table.TableModel([[0.1, 0.2, 0.3]],
127
- ['value1', 'value2', 'value3']),
128
- 'tip': 'The advantage of the Table model lies in its modularity.\n '
129
- 'For concrete examples see the'
130
- 'TableModelTabular and the TableModelSequential custom models in the'
131
- ' pymodaq.utils.scanner module'},
132
- ]}, # The advantage of the Table model lies in its modularity for concrete examples see the
133
- # TableModelTabular and the TableModelSequential custom models in the pymodaq.utils.scanner module
134
- ]
135
-
136
- def __init__(self):
137
- super().__init__()
138
-
139
- def value_changed(self, param):
140
- """
141
- """
142
- print(f'The parameter {param.name()} changed its value to {param.value()}')
143
-
144
-
145
- def main():
146
- app = QtWidgets.QApplication(sys.argv)
147
- ptree = ParameterEx()
148
- ptree.settings_tree.show()
149
- ptree.settings.child('itemss', 'itemsbis').setValue(dict(all_items=['item1', 'item2', 'item3'],
150
- selected=['item3']))
151
-
152
- ptree.settings.child('itemss', 'itemsbis').setValue(dict(all_items=['item1', 'item2', 'item3'],
153
- selected=['item1', 'item3']))
154
- sys.exit(app.exec_())
155
-
156
-
157
- if __name__ == '__main__':
158
- main()
@@ -1 +0,0 @@
1
- <Preset type="group" title="Preset" visible="1" removable="0" readonly="0"><filename type="str" title="Filename:" visible="1" removable="0" readonly="0">preset_MockCamera</filename><use_pid type="bool" title="Use PID as actuator:" visible="1" removable="0" readonly="0">0</use_pid><pid_models type="list" title="PID models:" visible="0" removable="0" readonly="0" values="[]" limits="[]">str('')</pid_models><model_settings type="group" title="Model Settings:" visible="0" removable="0" readonly="0" /><Moves type="groupmove" title="Moves:" visible="1" removable="0" readonly="0" addList="['Mock', 'MockCamera', 'MockTau', 'TCPServer', 'PID']"><move00 type="group" title="Actuator 00" visible="1" removable="1" readonly="0"><name type="str" title="Name:" visible="1" removable="0" readonly="0">Xaxis</name><init type="bool" title="Init?:" visible="1" removable="0" readonly="0">1</init><params type="group" title="Settings:" visible="1" removable="0" readonly="0"><main_settings type="group" title="Main Settings:" visible="1" removable="0" readonly="0"><move_type type="str" title="Actuator type:" visible="1" removable="0" readonly="1">MockCamera</move_type><module_name type="str" title="Actuator name:" visible="1" removable="0" readonly="1">Xaxis</module_name><controller_ID type="int" title="Controller ID:" visible="1" removable="0" readonly="0">4524</controller_ID><refresh_timeout type="int" title="Refresh value (ms):" visible="1" removable="0" readonly="0">500</refresh_timeout><tcpip type="group" title="TCP/IP options:" visible="1" removable="0" readonly="0"><connect_server type="bool_push" title="Connect to server:" visible="1" removable="0" readonly="0">0</connect_server><tcp_connected type="led" title="Connected?:" visible="1" removable="0" readonly="0">0</tcp_connected><ip_address type="str" title="IP address:" visible="1" removable="0" readonly="0">10.47.0.39</ip_address><port type="int" title="Port:" visible="1" removable="0" readonly="0">6341</port></tcpip></main_settings><move_settings type="group" title="Actuator Settings:" visible="1" removable="0" readonly="0"><multiaxes type="group" title="MultiAxes:" visible="1" removable="0" readonly="0"><ismultiaxes type="bool" title="is Multiaxes:" visible="1" removable="0" readonly="0">1</ismultiaxes><multi_status type="list" title="Status:" visible="1" removable="0" readonly="0" values="['Master', 'Slave']" limits="['Master', 'Slave']" show_pb="1">str('Slave')</multi_status><axis type="list" title="Axis:" visible="1" removable="0" readonly="0" values="['X', 'Y', 'Theta']" limits="['X', 'Y', 'Theta']" show_pb="1">str('X')</axis></multiaxes><units type="str" title="Units:" visible="1" removable="0" readonly="1" /><epsilon type="float" title="Epsilon:" visible="1" removable="0" readonly="0">1.0</epsilon><timeout type="int" title="Timeout (s):" visible="1" removable="0" readonly="0">20</timeout><bounds type="group" title="Bounds:" visible="1" removable="0" readonly="0"><is_bounds type="bool" title="Set Bounds:" visible="1" removable="0" readonly="0">0</is_bounds><min_bound type="float" title="Min:" visible="1" removable="0" readonly="0">0.0</min_bound><max_bound type="float" title="Max:" visible="1" removable="0" readonly="0">1.0</max_bound></bounds><scaling type="group" title="Scaling:" visible="1" removable="0" readonly="0"><use_scaling type="bool" title="Use scaling:" visible="1" removable="0" readonly="0">0</use_scaling><scaling type="float" title="Scaling factor:" visible="1" removable="0" readonly="0">1.0</scaling><offset type="float" title="Offset factor:" visible="1" removable="0" readonly="0">0.0</offset></scaling></move_settings></params></move00><move01 type="group" title="Actuator 01" visible="1" removable="1" readonly="0"><name type="str" title="Name:" visible="1" removable="0" readonly="0">Yaxis</name><init type="bool" title="Init?:" visible="1" removable="0" readonly="0">1</init><params type="group" title="Settings:" visible="1" removable="0" readonly="0"><main_settings type="group" title="Main Settings:" visible="1" removable="0" readonly="0"><move_type type="str" title="Actuator type:" visible="1" removable="0" readonly="1">MockCamera</move_type><module_name type="str" title="Actuator name:" visible="1" removable="0" readonly="1">Yaxis</module_name><controller_ID type="int" title="Controller ID:" visible="1" removable="0" readonly="0">4524</controller_ID><refresh_timeout type="int" title="Refresh value (ms):" visible="1" removable="0" readonly="0">500</refresh_timeout><tcpip type="group" title="TCP/IP options:" visible="1" removable="0" readonly="0"><connect_server type="bool_push" title="Connect to server:" visible="1" removable="0" readonly="0">0</connect_server><tcp_connected type="led" title="Connected?:" visible="1" removable="0" readonly="0">0</tcp_connected><ip_address type="str" title="IP address:" visible="1" removable="0" readonly="0">10.47.0.39</ip_address><port type="int" title="Port:" visible="1" removable="0" readonly="0">6341</port></tcpip></main_settings><move_settings type="group" title="Actuator Settings:" visible="1" removable="0" readonly="0"><multiaxes type="group" title="MultiAxes:" visible="1" removable="0" readonly="0"><ismultiaxes type="bool" title="is Multiaxes:" visible="1" removable="0" readonly="0">1</ismultiaxes><multi_status type="list" title="Status:" visible="1" removable="0" readonly="0" values="['Master', 'Slave']" limits="['Master', 'Slave']" show_pb="1">str('Slave')</multi_status><axis type="list" title="Axis:" visible="1" removable="0" readonly="0" values="['X', 'Y', 'Theta']" limits="['X', 'Y', 'Theta']" show_pb="1">str('Y')</axis></multiaxes><units type="str" title="Units:" visible="1" removable="0" readonly="1" /><epsilon type="float" title="Epsilon:" visible="1" removable="0" readonly="0">1.0</epsilon><timeout type="int" title="Timeout (s):" visible="1" removable="0" readonly="0">20</timeout><bounds type="group" title="Bounds:" visible="1" removable="0" readonly="0"><is_bounds type="bool" title="Set Bounds:" visible="1" removable="0" readonly="0">0</is_bounds><min_bound type="float" title="Min:" visible="1" removable="0" readonly="0">0.0</min_bound><max_bound type="float" title="Max:" visible="1" removable="0" readonly="0">1.0</max_bound></bounds><scaling type="group" title="Scaling:" visible="1" removable="0" readonly="0"><use_scaling type="bool" title="Use scaling:" visible="1" removable="0" readonly="0">0</use_scaling><scaling type="float" title="Scaling factor:" visible="1" removable="0" readonly="0">1.0</scaling><offset type="float" title="Offset factor:" visible="1" removable="0" readonly="0">0.0</offset></scaling></move_settings></params></move01><move02 type="group" title="Actuator 02" visible="1" removable="1" readonly="0"><name type="str" title="Name:" visible="1" removable="0" readonly="0">Theta</name><init type="bool" title="Init?:" visible="1" removable="0" readonly="0">1</init><params type="group" title="Settings:" visible="1" removable="0" readonly="0"><main_settings type="group" title="Main Settings:" visible="1" removable="0" readonly="0"><move_type type="str" title="Actuator type:" visible="1" removable="0" readonly="1">MockCamera</move_type><module_name type="str" title="Actuator name:" visible="1" removable="0" readonly="1">Theta</module_name><controller_ID type="int" title="Controller ID:" visible="1" removable="0" readonly="0">4524</controller_ID><refresh_timeout type="int" title="Refresh value (ms):" visible="1" removable="0" readonly="0">500</refresh_timeout><tcpip type="group" title="TCP/IP options:" visible="1" removable="0" readonly="0"><connect_server type="bool_push" title="Connect to server:" visible="1" removable="0" readonly="0">0</connect_server><tcp_connected type="led" title="Connected?:" visible="1" removable="0" readonly="0">0</tcp_connected><ip_address type="str" title="IP address:" visible="1" removable="0" readonly="0">10.47.0.39</ip_address><port type="int" title="Port:" visible="1" removable="0" readonly="0">6341</port></tcpip></main_settings><move_settings type="group" title="Actuator Settings:" visible="1" removable="0" readonly="0"><multiaxes type="group" title="MultiAxes:" visible="1" removable="0" readonly="0"><ismultiaxes type="bool" title="is Multiaxes:" visible="1" removable="0" readonly="0">1</ismultiaxes><multi_status type="list" title="Status:" visible="1" removable="0" readonly="0" values="['Master', 'Slave']" limits="['Master', 'Slave']" show_pb="1">str('Slave')</multi_status><axis type="list" title="Axis:" visible="1" removable="0" readonly="0" values="['X', 'Y', 'Theta']" limits="['X', 'Y', 'Theta']" show_pb="1">str('Theta')</axis></multiaxes><units type="str" title="Units:" visible="1" removable="0" readonly="1" /><epsilon type="float" title="Epsilon:" visible="1" removable="0" readonly="0">1.0</epsilon><timeout type="int" title="Timeout (s):" visible="1" removable="0" readonly="0">20</timeout><bounds type="group" title="Bounds:" visible="1" removable="0" readonly="0"><is_bounds type="bool" title="Set Bounds:" visible="1" removable="0" readonly="0">0</is_bounds><min_bound type="float" title="Min:" visible="1" removable="0" readonly="0">0.0</min_bound><max_bound type="float" title="Max:" visible="1" removable="0" readonly="0">1.0</max_bound></bounds><scaling type="group" title="Scaling:" visible="1" removable="0" readonly="0"><use_scaling type="bool" title="Use scaling:" visible="1" removable="0" readonly="0">0</use_scaling><scaling type="float" title="Scaling factor:" visible="1" removable="0" readonly="0">1.0</scaling><offset type="float" title="Offset factor:" visible="1" removable="0" readonly="0">0.0</offset></scaling></move_settings></params></move02></Moves><Detectors type="groupdet" title="Detectors:" visible="1" removable="0" readonly="0" addList="['DAQ0D/Mock', 'DAQ0D/TCPServer', 'DAQ1D/Mock', 'DAQ1D/Mock_spectro', 'DAQ1D/TCPServer', 'DAQ2D/Mock', 'DAQ2D/MockCamera', 'DAQ2D/TCPServer', 'DAQND/Mock']"><det00 type="group" title="Det 00" visible="1" removable="1" readonly="0"><name type="str" title="Name:" visible="1" removable="0" readonly="0">Camera</name><init type="bool" title="Init?:" visible="1" removable="0" readonly="0">1</init><params type="group" title="Settings:" visible="1" removable="0" readonly="0"><main_settings type="group" title="Main Settings:" visible="1" removable="0" readonly="0"><DAQ_type type="list" title="DAQ type:" visible="1" removable="0" readonly="1" values="['DAQ0D', 'DAQ1D', 'DAQ2D', 'DAQND']" limits="['DAQ0D', 'DAQ1D', 'DAQ2D', 'DAQND']" show_pb="1">str('DAQ2D')</DAQ_type><detector_type type="str" title="Detector type:" visible="1" removable="0" readonly="1">MockCamera</detector_type><module_name type="str" title="Detector Name:" visible="1" removable="0" readonly="1">Camera</module_name><Nviewers type="int" title="Nviewers:" visible="1" removable="0" readonly="1">1</Nviewers><controller_ID type="int" title="Controller ID:" visible="1" removable="0" readonly="0">4524</controller_ID><show_data type="bool" title="Show data and process:" visible="1" removable="0" readonly="0">1</show_data><refresh_time type="float" title="Refresh time (ms):" visible="1" removable="0" readonly="0">50.0</refresh_time><Naverage type="int" title="Naverage" visible="1" removable="0" readonly="0">1</Naverage><show_averaging type="bool" title="Show averaging:" visible="1" removable="0" readonly="0">0</show_averaging><live_averaging type="bool" title="Live averaging:" visible="1" removable="0" readonly="0">0</live_averaging><N_live_averaging type="int" title="N Live aver.:" visible="0" removable="0" readonly="0">0</N_live_averaging><wait_time type="int" title="Wait time (ms):" visible="1" removable="0" readonly="0">0</wait_time><continuous_saving_opt type="bool" title="Continuous saving:" visible="1" removable="0" readonly="0">0</continuous_saving_opt><tcpip type="group" title="TCP/IP options:" visible="1" removable="0" readonly="0"><connect_server type="bool_push" title="Connect to server:" visible="1" removable="0" readonly="0">0</connect_server><tcp_connected type="led" title="Connected?:" visible="1" removable="0" readonly="0">0</tcp_connected><ip_address type="str" title="IP address:" visible="1" removable="0" readonly="0">10.47.0.39</ip_address><port type="int" title="Port:" visible="1" removable="0" readonly="0">6341</port></tcpip><overshoot type="group" title="Overshoot options:" visible="1" removable="0" readonly="0"><stop_overshoot type="bool" title="Overshoot:" visible="1" removable="0" readonly="0">0</stop_overshoot><overshoot_value type="float" title="Overshoot value:" visible="1" removable="0" readonly="0">0.0</overshoot_value></overshoot><axes type="group" title="Axis options:" visible="1" removable="0" readonly="0"><use_calib type="list" title="Use calibration?:" visible="1" removable="0" readonly="0" values="['None']" limits="['None']" show_pb="1">str('None')</use_calib><xaxis type="group" title="X axis:" visible="1" removable="0" readonly="0"><xlabel type="str" title="Label:" visible="1" removable="0" readonly="0">x axis</xlabel><xunits type="str" title="Units:" visible="1" removable="0" readonly="0">pxls</xunits><xoffset type="float" title="Offset:" visible="1" removable="0" readonly="0">0.0</xoffset><xscaling type="float" title="Scaling" visible="1" removable="0" readonly="0">1.0</xscaling></xaxis><yaxis type="group" title="Y axis:" visible="1" removable="0" readonly="0"><ylabel type="str" title="Label:" visible="1" removable="0" readonly="0">y axis</ylabel><yunits type="str" title="Units:" visible="1" removable="0" readonly="0">pxls</yunits><yoffset type="float" title="Offset:" visible="1" removable="0" readonly="0">0.0</yoffset><yscaling type="float" title="Scaling" visible="1" removable="0" readonly="0">1.0</yscaling></yaxis></axes></main_settings><detector_settings type="group" title="Detector Settings" visible="1" removable="0" readonly="0"><controller_status type="list" title="Controller Status:" visible="1" removable="0" readonly="0" values="['Master', 'Slave']" limits="['Master', 'Slave']" show_pb="1">str('Master')</controller_status><wait_time type="int" title="Wait time (ms)" visible="1" removable="0" readonly="0">50</wait_time><Nimagescolor type="int" title="Nimages colors:" visible="1" removable="0" readonly="0">1</Nimagescolor><Nimagespannel type="int" title="Nimages pannels:" visible="1" removable="0" readonly="0">1</Nimagespannel><use_roi_select type="bool" title="Use ROISelect" visible="1" removable="0" readonly="0">0</use_roi_select><threshold type="int" title="Threshold" visible="1" removable="0" readonly="0">1</threshold><current_values type="group" title="Values" visible="1" removable="0" readonly="0"><X type="float" title="X" visible="1" removable="0" readonly="0">0.0</X><Y type="float" title="Y" visible="1" removable="0" readonly="0">0.0</Y><Theta type="float" title="Theta" visible="1" removable="0" readonly="0">0.0</Theta></current_values><cam_settings type="group" title="Cam. Prop.:" visible="1" removable="0" readonly="0"><Nx type="int" title="Nx" visible="1" removable="0" readonly="0">100</Nx><Ny type="int" title="Ny" visible="1" removable="0" readonly="0">200</Ny><amp type="int" title="Amp" visible="1" removable="0" readonly="0">20</amp><x0 type="slide" title="x0" visible="1" removable="0" readonly="0">50</x0><y0 type="float" title="y0" visible="1" removable="0" readonly="0">100.0</y0><dx type="float" title="dx" visible="1" removable="0" readonly="0">20.0</dx><dy type="float" title="dy" visible="1" removable="0" readonly="0">40.0</dy><n type="int" title="n" visible="1" removable="0" readonly="0">1</n><amp_noise type="float" title="amp_noise" visible="1" removable="0" readonly="0">2.0</amp_noise></cam_settings></detector_settings></params></det00></Detectors></Preset>