pymodaq 4.2.4__py3-none-any.whl → 5.0.0__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 (399) hide show
  1. pymodaq/__init__.py +30 -23
  2. pymodaq/control_modules/daq_move.py +27 -14
  3. pymodaq/control_modules/daq_move_ui.py +28 -12
  4. pymodaq/control_modules/daq_viewer.py +38 -28
  5. pymodaq/control_modules/daq_viewer_ui.py +6 -6
  6. pymodaq/control_modules/mocks.py +1 -1
  7. pymodaq/control_modules/move_utility_classes.py +19 -10
  8. pymodaq/control_modules/utils.py +18 -12
  9. pymodaq/control_modules/viewer_utility_classes.py +13 -4
  10. pymodaq/dashboard.py +164 -115
  11. pymodaq/examples/custom_app.py +13 -16
  12. pymodaq/examples/custom_viewer.py +6 -6
  13. pymodaq/examples/function_plotter.py +13 -12
  14. pymodaq/examples/parameter_ex.py +50 -25
  15. pymodaq/examples/tcp_client.py +1 -1
  16. pymodaq/extensions/__init__.py +1 -1
  17. pymodaq/extensions/bayesian/bayesian_optimisation.py +15 -12
  18. pymodaq/extensions/bayesian/utils.py +10 -10
  19. pymodaq/extensions/console.py +10 -13
  20. pymodaq/extensions/{daq_logger.py → daq_logger/daq_logger.py} +36 -56
  21. pymodaq/{utils/db/db_logger → extensions/daq_logger/db}/db_logger.py +16 -15
  22. pymodaq/{utils/db/db_logger → extensions/daq_logger/db}/db_logger_models.py +2 -0
  23. pymodaq/{utils/h5modules → extensions/daq_logger}/h5logging.py +7 -8
  24. pymodaq/extensions/daq_scan.py +153 -247
  25. pymodaq/extensions/daq_scan_ui.py +11 -9
  26. pymodaq/extensions/h5browser.py +8 -8
  27. pymodaq/extensions/pid/__init__.py +6 -3
  28. pymodaq/extensions/pid/daq_move_PID.py +4 -2
  29. pymodaq/extensions/pid/pid_controller.py +15 -12
  30. pymodaq/extensions/pid/utils.py +10 -5
  31. pymodaq/extensions/utils.py +5 -3
  32. pymodaq/post_treatment/load_and_plot.py +10 -7
  33. pymodaq/resources/preset_default.xml +1 -1
  34. pymodaq/utils/array_manipulation.py +4 -384
  35. pymodaq/utils/calibration_camera.py +12 -9
  36. pymodaq/utils/chrono_timer.py +7 -5
  37. pymodaq/utils/config.py +3 -450
  38. pymodaq/utils/daq_utils.py +6 -708
  39. pymodaq/utils/data.py +9 -2774
  40. pymodaq/utils/exceptions.py +0 -4
  41. pymodaq/utils/gui_utils/__init__.py +8 -8
  42. pymodaq/utils/gui_utils/loader_utils.py +38 -0
  43. pymodaq/utils/gui_utils/utils.py +6 -138
  44. pymodaq/utils/h5modules/__init__.py +0 -4
  45. pymodaq/utils/h5modules/module_saving.py +15 -8
  46. pymodaq/utils/leco/__init__.py +2 -2
  47. pymodaq/utils/leco/daq_move_LECODirector.py +2 -2
  48. pymodaq/utils/leco/daq_xDviewer_LECODirector.py +2 -2
  49. pymodaq/utils/leco/director_utils.py +2 -2
  50. pymodaq/utils/leco/leco_director.py +3 -3
  51. pymodaq/utils/leco/pymodaq_listener.py +2 -2
  52. pymodaq/utils/leco/utils.py +1 -1
  53. pymodaq/utils/logger.py +4 -76
  54. pymodaq/utils/managers/batchscan_manager.py +16 -19
  55. pymodaq/utils/managers/modules_manager.py +10 -7
  56. pymodaq/utils/managers/overshoot_manager.py +3 -5
  57. pymodaq/utils/managers/preset_manager.py +37 -15
  58. pymodaq/utils/managers/preset_manager_utils.py +11 -9
  59. pymodaq/utils/managers/remote_manager.py +12 -10
  60. pymodaq/utils/math_utils.py +4 -572
  61. pymodaq/utils/parameter/__init__.py +4 -11
  62. pymodaq/utils/parameter/utils.py +4 -299
  63. pymodaq/utils/scanner/scan_config.py +1 -1
  64. pymodaq/utils/scanner/scan_factory.py +16 -12
  65. pymodaq/utils/{plotting → scanner}/scan_selector.py +19 -20
  66. pymodaq/utils/scanner/scanner.py +10 -8
  67. pymodaq/utils/scanner/scanners/_1d_scanners.py +8 -5
  68. pymodaq/utils/scanner/scanners/_2d_scanners.py +5 -5
  69. pymodaq/utils/scanner/scanners/sequential.py +8 -8
  70. pymodaq/utils/scanner/scanners/tabular.py +9 -9
  71. pymodaq/utils/scanner/utils.py +6 -4
  72. pymodaq/utils/svg/svg_viewer2D.py +3 -4
  73. pymodaq/utils/tcp_ip/serializer.py +64 -16
  74. pymodaq/utils/tcp_ip/tcp_server_client.py +10 -8
  75. {pymodaq-4.2.4.dist-info → pymodaq-5.0.0.dist-info}/METADATA +5 -3
  76. pymodaq-5.0.0.dist-info/RECORD +123 -0
  77. pymodaq/post_treatment/process_to_scalar.py +0 -263
  78. pymodaq/resources/QtDesigner_Ressources/Icon_Library/1d.png +0 -0
  79. pymodaq/resources/QtDesigner_Ressources/Icon_Library/2d.png +0 -0
  80. pymodaq/resources/QtDesigner_Ressources/Icon_Library/3d.png +0 -0
  81. pymodaq/resources/QtDesigner_Ressources/Icon_Library/Add2.png +0 -0
  82. pymodaq/resources/QtDesigner_Ressources/Icon_Library/Add_Step.png +0 -0
  83. pymodaq/resources/QtDesigner_Ressources/Icon_Library/Approve.png +0 -0
  84. pymodaq/resources/QtDesigner_Ressources/Icon_Library/Approve_All.png +0 -0
  85. pymodaq/resources/QtDesigner_Ressources/Icon_Library/Browse_Dir_Path.png +0 -0
  86. pymodaq/resources/QtDesigner_Ressources/Icon_Library/Calculator.png +0 -0
  87. pymodaq/resources/QtDesigner_Ressources/Icon_Library/ChnGroup.png +0 -0
  88. pymodaq/resources/QtDesigner_Ressources/Icon_Library/ChnNum.png +0 -0
  89. pymodaq/resources/QtDesigner_Ressources/Icon_Library/ChnText.png +0 -0
  90. pymodaq/resources/QtDesigner_Ressources/Icon_Library/ChnTime.png +0 -0
  91. pymodaq/resources/QtDesigner_Ressources/Icon_Library/ChnWave.png +0 -0
  92. pymodaq/resources/QtDesigner_Ressources/Icon_Library/Close3.png +0 -0
  93. pymodaq/resources/QtDesigner_Ressources/Icon_Library/CollapseAll.png +0 -0
  94. pymodaq/resources/QtDesigner_Ressources/Icon_Library/CollapseAll_32.png +0 -0
  95. pymodaq/resources/QtDesigner_Ressources/Icon_Library/ColorPicker.png +0 -0
  96. pymodaq/resources/QtDesigner_Ressources/Icon_Library/Contract.png +0 -0
  97. pymodaq/resources/QtDesigner_Ressources/Icon_Library/Create.png +0 -0
  98. pymodaq/resources/QtDesigner_Ressources/Icon_Library/DeleteLayer.png +0 -0
  99. pymodaq/resources/QtDesigner_Ressources/Icon_Library/EditOpen.png +0 -0
  100. pymodaq/resources/QtDesigner_Ressources/Icon_Library/EditRedo.png +0 -0
  101. pymodaq/resources/QtDesigner_Ressources/Icon_Library/EditUndo.png +0 -0
  102. pymodaq/resources/QtDesigner_Ressources/Icon_Library/Ellipse.png +0 -0
  103. pymodaq/resources/QtDesigner_Ressources/Icon_Library/EllipseFilled.png +0 -0
  104. pymodaq/resources/QtDesigner_Ressources/Icon_Library/Error.png +0 -0
  105. pymodaq/resources/QtDesigner_Ressources/Icon_Library/ErrorMessage.png +0 -0
  106. pymodaq/resources/QtDesigner_Ressources/Icon_Library/Error_16.png +0 -0
  107. pymodaq/resources/QtDesigner_Ressources/Icon_Library/Exit.png +0 -0
  108. pymodaq/resources/QtDesigner_Ressources/Icon_Library/Expand.png +0 -0
  109. pymodaq/resources/QtDesigner_Ressources/Icon_Library/ExpandAll.png +0 -0
  110. pymodaq/resources/QtDesigner_Ressources/Icon_Library/ExpandAll_32.png +0 -0
  111. pymodaq/resources/QtDesigner_Ressources/Icon_Library/FFT.png +0 -0
  112. pymodaq/resources/QtDesigner_Ressources/Icon_Library/HLM.ico +0 -0
  113. pymodaq/resources/QtDesigner_Ressources/Icon_Library/Help.png +0 -0
  114. pymodaq/resources/QtDesigner_Ressources/Icon_Library/Help_32.png +0 -0
  115. pymodaq/resources/QtDesigner_Ressources/Icon_Library/Histogram.png +0 -0
  116. pymodaq/resources/QtDesigner_Ressources/Icon_Library/LUT_LookUpTable.png +0 -0
  117. pymodaq/resources/QtDesigner_Ressources/Icon_Library/MagnifyingGlass.png +0 -0
  118. pymodaq/resources/QtDesigner_Ressources/Icon_Library/MagnifyingGlass_24.png +0 -0
  119. pymodaq/resources/QtDesigner_Ressources/Icon_Library/Marker.png +0 -0
  120. pymodaq/resources/QtDesigner_Ressources/Icon_Library/Math.png +0 -0
  121. pymodaq/resources/QtDesigner_Ressources/Icon_Library/MeasurementStudio_32.png +0 -0
  122. pymodaq/resources/QtDesigner_Ressources/Icon_Library/Move.png +0 -0
  123. pymodaq/resources/QtDesigner_Ressources/Icon_Library/MoveDown.png +0 -0
  124. pymodaq/resources/QtDesigner_Ressources/Icon_Library/MoveUp.png +0 -0
  125. pymodaq/resources/QtDesigner_Ressources/Icon_Library/Multiply.png +0 -0
  126. pymodaq/resources/QtDesigner_Ressources/Icon_Library/NewFile.png +0 -0
  127. pymodaq/resources/QtDesigner_Ressources/Icon_Library/NewLayer.png +0 -0
  128. pymodaq/resources/QtDesigner_Ressources/Icon_Library/New_File.png +0 -0
  129. pymodaq/resources/QtDesigner_Ressources/Icon_Library/New_Folder.png +0 -0
  130. pymodaq/resources/QtDesigner_Ressources/Icon_Library/Open.png +0 -0
  131. pymodaq/resources/QtDesigner_Ressources/Icon_Library/Open_1D.png +0 -0
  132. pymodaq/resources/QtDesigner_Ressources/Icon_Library/Open_2D.png +0 -0
  133. pymodaq/resources/QtDesigner_Ressources/Icon_Library/Open_File.png +0 -0
  134. pymodaq/resources/QtDesigner_Ressources/Icon_Library/Open_File_32.png +0 -0
  135. pymodaq/resources/QtDesigner_Ressources/Icon_Library/Open_sim.png +0 -0
  136. pymodaq/resources/QtDesigner_Ressources/Icon_Library/Options.png +0 -0
  137. pymodaq/resources/QtDesigner_Ressources/Icon_Library/Oscilloscope.png +0 -0
  138. pymodaq/resources/QtDesigner_Ressources/Icon_Library/Oscilloscope_16.png +0 -0
  139. pymodaq/resources/QtDesigner_Ressources/Icon_Library/Pass.png +0 -0
  140. pymodaq/resources/QtDesigner_Ressources/Icon_Library/RGB.png +0 -0
  141. pymodaq/resources/QtDesigner_Ressources/Icon_Library/Rectangle.png +0 -0
  142. pymodaq/resources/QtDesigner_Ressources/Icon_Library/RectangleFilled.png +0 -0
  143. pymodaq/resources/QtDesigner_Ressources/Icon_Library/Redo.png +0 -0
  144. pymodaq/resources/QtDesigner_Ressources/Icon_Library/Refresh.png +0 -0
  145. pymodaq/resources/QtDesigner_Ressources/Icon_Library/Refresh2.png +0 -0
  146. pymodaq/resources/QtDesigner_Ressources/Icon_Library/Refresh_32.png +0 -0
  147. pymodaq/resources/QtDesigner_Ressources/Icon_Library/Region.png +0 -0
  148. pymodaq/resources/QtDesigner_Ressources/Icon_Library/Rendezvous.png +0 -0
  149. pymodaq/resources/QtDesigner_Ressources/Icon_Library/SELECT.png +0 -0
  150. pymodaq/resources/QtDesigner_Ressources/Icon_Library/Save.png +0 -0
  151. pymodaq/resources/QtDesigner_Ressources/Icon_Library/SaveAll.png +0 -0
  152. pymodaq/resources/QtDesigner_Ressources/Icon_Library/SaveAll_32.png +0 -0
  153. pymodaq/resources/QtDesigner_Ressources/Icon_Library/SaveAs.png +0 -0
  154. pymodaq/resources/QtDesigner_Ressources/Icon_Library/SaveAs_32.png +0 -0
  155. pymodaq/resources/QtDesigner_Ressources/Icon_Library/Save_24.png +0 -0
  156. pymodaq/resources/QtDesigner_Ressources/Icon_Library/Save_32.png +0 -0
  157. pymodaq/resources/QtDesigner_Ressources/Icon_Library/Search.png +0 -0
  158. pymodaq/resources/QtDesigner_Ressources/Icon_Library/SelectPolygon.png +0 -0
  159. pymodaq/resources/QtDesigner_Ressources/Icon_Library/Select_24.png +0 -0
  160. pymodaq/resources/QtDesigner_Ressources/Icon_Library/Settings.png +0 -0
  161. pymodaq/resources/QtDesigner_Ressources/Icon_Library/Snap&Save.png +0 -0
  162. pymodaq/resources/QtDesigner_Ressources/Icon_Library/Snapshot.png +0 -0
  163. pymodaq/resources/QtDesigner_Ressources/Icon_Library/Snapshot2.png +0 -0
  164. pymodaq/resources/QtDesigner_Ressources/Icon_Library/Snapshot2_16.png +0 -0
  165. pymodaq/resources/QtDesigner_Ressources/Icon_Library/Snapshot2_32.png +0 -0
  166. pymodaq/resources/QtDesigner_Ressources/Icon_Library/Spreadsheet.png +0 -0
  167. pymodaq/resources/QtDesigner_Ressources/Icon_Library/Statistics.png +0 -0
  168. pymodaq/resources/QtDesigner_Ressources/Icon_Library/Statistics2.png +0 -0
  169. pymodaq/resources/QtDesigner_Ressources/Icon_Library/Status.png +0 -0
  170. pymodaq/resources/QtDesigner_Ressources/Icon_Library/Subtract.png +0 -0
  171. pymodaq/resources/QtDesigner_Ressources/Icon_Library/Vision.png +0 -0
  172. pymodaq/resources/QtDesigner_Ressources/Icon_Library/Volts.png +0 -0
  173. pymodaq/resources/QtDesigner_Ressources/Icon_Library/Wait2.png +0 -0
  174. pymodaq/resources/QtDesigner_Ressources/Icon_Library/Zoom_1_1.png +0 -0
  175. pymodaq/resources/QtDesigner_Ressources/Icon_Library/Zoom_in.png +0 -0
  176. pymodaq/resources/QtDesigner_Ressources/Icon_Library/Zoom_out.png +0 -0
  177. pymodaq/resources/QtDesigner_Ressources/Icon_Library/Zoom_to_Selection.png +0 -0
  178. pymodaq/resources/QtDesigner_Ressources/Icon_Library/abort.png +0 -0
  179. pymodaq/resources/QtDesigner_Ressources/Icon_Library/advanced2.png +0 -0
  180. pymodaq/resources/QtDesigner_Ressources/Icon_Library/autoscale.png +0 -0
  181. pymodaq/resources/QtDesigner_Ressources/Icon_Library/b_icon.png +0 -0
  182. pymodaq/resources/QtDesigner_Ressources/Icon_Library/back.png +0 -0
  183. pymodaq/resources/QtDesigner_Ressources/Icon_Library/bg_icon.png +0 -0
  184. pymodaq/resources/QtDesigner_Ressources/Icon_Library/camera.png +0 -0
  185. pymodaq/resources/QtDesigner_Ressources/Icon_Library/camera_snap.png +0 -0
  186. pymodaq/resources/QtDesigner_Ressources/Icon_Library/cartesian.png +0 -0
  187. pymodaq/resources/QtDesigner_Ressources/Icon_Library/clear2.png +0 -0
  188. pymodaq/resources/QtDesigner_Ressources/Icon_Library/clear_ROI.png +0 -0
  189. pymodaq/resources/QtDesigner_Ressources/Icon_Library/close2.png +0 -0
  190. pymodaq/resources/QtDesigner_Ressources/Icon_Library/cluster2.png +0 -0
  191. pymodaq/resources/QtDesigner_Ressources/Icon_Library/color.png +0 -0
  192. pymodaq/resources/QtDesigner_Ressources/Icon_Library/color2.png +0 -0
  193. pymodaq/resources/QtDesigner_Ressources/Icon_Library/continuous.png +0 -0
  194. pymodaq/resources/QtDesigner_Ressources/Icon_Library/data.png +0 -0
  195. pymodaq/resources/QtDesigner_Ressources/Icon_Library/delay.png +0 -0
  196. pymodaq/resources/QtDesigner_Ressources/Icon_Library/download.png +0 -0
  197. pymodaq/resources/QtDesigner_Ressources/Icon_Library/download2.png +0 -0
  198. pymodaq/resources/QtDesigner_Ressources/Icon_Library/error2.png +0 -0
  199. pymodaq/resources/QtDesigner_Ressources/Icon_Library/ethernet.png +0 -0
  200. pymodaq/resources/QtDesigner_Ressources/Icon_Library/exit2.png +0 -0
  201. pymodaq/resources/QtDesigner_Ressources/Icon_Library/fan.png +0 -0
  202. pymodaq/resources/QtDesigner_Ressources/Icon_Library/filter2.png +0 -0
  203. pymodaq/resources/QtDesigner_Ressources/Icon_Library/g_icon.png +0 -0
  204. pymodaq/resources/QtDesigner_Ressources/Icon_Library/gear2.png +0 -0
  205. pymodaq/resources/QtDesigner_Ressources/Icon_Library/go_to.png +0 -0
  206. pymodaq/resources/QtDesigner_Ressources/Icon_Library/go_to_1.png +0 -0
  207. pymodaq/resources/QtDesigner_Ressources/Icon_Library/go_to_2.png +0 -0
  208. pymodaq/resources/QtDesigner_Ressources/Icon_Library/grab.png +0 -0
  209. pymodaq/resources/QtDesigner_Ressources/Icon_Library/graph.png +0 -0
  210. pymodaq/resources/QtDesigner_Ressources/Icon_Library/greenLight2.png +0 -0
  211. pymodaq/resources/QtDesigner_Ressources/Icon_Library/greenLight2_32.png +0 -0
  212. pymodaq/resources/QtDesigner_Ressources/Icon_Library/green_light.png +0 -0
  213. pymodaq/resources/QtDesigner_Ressources/Icon_Library/grey_icon.png +0 -0
  214. pymodaq/resources/QtDesigner_Ressources/Icon_Library/greyscale.png +0 -0
  215. pymodaq/resources/QtDesigner_Ressources/Icon_Library/help1.png +0 -0
  216. pymodaq/resources/QtDesigner_Ressources/Icon_Library/help1_32.png +0 -0
  217. pymodaq/resources/QtDesigner_Ressources/Icon_Library/home2.png +0 -0
  218. pymodaq/resources/QtDesigner_Ressources/Icon_Library/information2.png +0 -0
  219. pymodaq/resources/QtDesigner_Ressources/Icon_Library/ini.png +0 -0
  220. pymodaq/resources/QtDesigner_Ressources/Icon_Library/integrator.png +0 -0
  221. pymodaq/resources/QtDesigner_Ressources/Icon_Library/joystick.png +0 -0
  222. pymodaq/resources/QtDesigner_Ressources/Icon_Library/light_green.png +0 -0
  223. pymodaq/resources/QtDesigner_Ressources/Icon_Library/light_green_16.png +0 -0
  224. pymodaq/resources/QtDesigner_Ressources/Icon_Library/light_red.png +0 -0
  225. pymodaq/resources/QtDesigner_Ressources/Icon_Library/light_red_16.png +0 -0
  226. pymodaq/resources/QtDesigner_Ressources/Icon_Library/light_yellow.png +0 -0
  227. pymodaq/resources/QtDesigner_Ressources/Icon_Library/light_yellow_16.png +0 -0
  228. pymodaq/resources/QtDesigner_Ressources/Icon_Library/limiter.png +0 -0
  229. pymodaq/resources/QtDesigner_Ressources/Icon_Library/load_ROI.png +0 -0
  230. pymodaq/resources/QtDesigner_Ressources/Icon_Library/meshPlot.png +0 -0
  231. pymodaq/resources/QtDesigner_Ressources/Icon_Library/meter.png +0 -0
  232. pymodaq/resources/QtDesigner_Ressources/Icon_Library/meter2.png +0 -0
  233. pymodaq/resources/QtDesigner_Ressources/Icon_Library/meter_32.png +0 -0
  234. pymodaq/resources/QtDesigner_Ressources/Icon_Library/move_contour.png +0 -0
  235. pymodaq/resources/QtDesigner_Ressources/Icon_Library/move_straight_line.png +0 -0
  236. pymodaq/resources/QtDesigner_Ressources/Icon_Library/movie.png +0 -0
  237. pymodaq/resources/QtDesigner_Ressources/Icon_Library/multi_point.png +0 -0
  238. pymodaq/resources/QtDesigner_Ressources/Icon_Library/multiplexer.png +0 -0
  239. pymodaq/resources/QtDesigner_Ressources/Icon_Library/new.png +0 -0
  240. pymodaq/resources/QtDesigner_Ressources/Icon_Library/openArrow.png +0 -0
  241. pymodaq/resources/QtDesigner_Ressources/Icon_Library/openTree.png +0 -0
  242. pymodaq/resources/QtDesigner_Ressources/Icon_Library/oscilloscope2.png +0 -0
  243. pymodaq/resources/QtDesigner_Ressources/Icon_Library/oscilloscope3.png +0 -0
  244. pymodaq/resources/QtDesigner_Ressources/Icon_Library/overlay.png +0 -0
  245. pymodaq/resources/QtDesigner_Ressources/Icon_Library/pass2.png +0 -0
  246. pymodaq/resources/QtDesigner_Ressources/Icon_Library/pass2_16.png +0 -0
  247. pymodaq/resources/QtDesigner_Ressources/Icon_Library/pass_32.png +0 -0
  248. pymodaq/resources/QtDesigner_Ressources/Icon_Library/pause.png +0 -0
  249. pymodaq/resources/QtDesigner_Ressources/Icon_Library/permute.png +0 -0
  250. pymodaq/resources/QtDesigner_Ressources/Icon_Library/phase.png +0 -0
  251. pymodaq/resources/QtDesigner_Ressources/Icon_Library/play.png +0 -0
  252. pymodaq/resources/QtDesigner_Ressources/Icon_Library/polar.png +0 -0
  253. pymodaq/resources/QtDesigner_Ressources/Icon_Library/pole_zero.png +0 -0
  254. pymodaq/resources/QtDesigner_Ressources/Icon_Library/powerMeter.png +0 -0
  255. pymodaq/resources/QtDesigner_Ressources/Icon_Library/powerSwitch.png +0 -0
  256. pymodaq/resources/QtDesigner_Ressources/Icon_Library/powerSwitch_16.png +0 -0
  257. pymodaq/resources/QtDesigner_Ressources/Icon_Library/print2.png +0 -0
  258. pymodaq/resources/QtDesigner_Ressources/Icon_Library/print2_32.png +0 -0
  259. pymodaq/resources/QtDesigner_Ressources/Icon_Library/properties.png +0 -0
  260. pymodaq/resources/QtDesigner_Ressources/Icon_Library/r_icon.png +0 -0
  261. pymodaq/resources/QtDesigner_Ressources/Icon_Library/radiocontrolbutton.png +0 -0
  262. pymodaq/resources/QtDesigner_Ressources/Icon_Library/read2.png +0 -0
  263. pymodaq/resources/QtDesigner_Ressources/Icon_Library/red_light.png +0 -0
  264. pymodaq/resources/QtDesigner_Ressources/Icon_Library/remove.png +0 -0
  265. pymodaq/resources/QtDesigner_Ressources/Icon_Library/reset.png +0 -0
  266. pymodaq/resources/QtDesigner_Ressources/Icon_Library/rgb_icon.png +0 -0
  267. pymodaq/resources/QtDesigner_Ressources/Icon_Library/robot.png +0 -0
  268. pymodaq/resources/QtDesigner_Ressources/Icon_Library/rotation2.png +0 -0
  269. pymodaq/resources/QtDesigner_Ressources/Icon_Library/run2.png +0 -0
  270. pymodaq/resources/QtDesigner_Ressources/Icon_Library/run_all.png +0 -0
  271. pymodaq/resources/QtDesigner_Ressources/Icon_Library/saturation.png +0 -0
  272. pymodaq/resources/QtDesigner_Ressources/Icon_Library/saveTree.png +0 -0
  273. pymodaq/resources/QtDesigner_Ressources/Icon_Library/save_ROI.png +0 -0
  274. pymodaq/resources/QtDesigner_Ressources/Icon_Library/scale_horizontally.png +0 -0
  275. pymodaq/resources/QtDesigner_Ressources/Icon_Library/scale_vertically.png +0 -0
  276. pymodaq/resources/QtDesigner_Ressources/Icon_Library/search2.png +0 -0
  277. pymodaq/resources/QtDesigner_Ressources/Icon_Library/select2.png +0 -0
  278. pymodaq/resources/QtDesigner_Ressources/Icon_Library/select_all.png +0 -0
  279. pymodaq/resources/QtDesigner_Ressources/Icon_Library/select_all2.png +0 -0
  280. pymodaq/resources/QtDesigner_Ressources/Icon_Library/select_none.png +0 -0
  281. pymodaq/resources/QtDesigner_Ressources/Icon_Library/sequence.png +0 -0
  282. pymodaq/resources/QtDesigner_Ressources/Icon_Library/sequence2.png +0 -0
  283. pymodaq/resources/QtDesigner_Ressources/Icon_Library/snap.png +0 -0
  284. pymodaq/resources/QtDesigner_Ressources/Icon_Library/sort_ascend.png +0 -0
  285. pymodaq/resources/QtDesigner_Ressources/Icon_Library/spectrumAnalyzer.png +0 -0
  286. pymodaq/resources/QtDesigner_Ressources/Icon_Library/start.png +0 -0
  287. pymodaq/resources/QtDesigner_Ressources/Icon_Library/status_cancelled.png +0 -0
  288. pymodaq/resources/QtDesigner_Ressources/Icon_Library/stop.png +0 -0
  289. pymodaq/resources/QtDesigner_Ressources/Icon_Library/stop2.png +0 -0
  290. pymodaq/resources/QtDesigner_Ressources/Icon_Library/stop3.png +0 -0
  291. pymodaq/resources/QtDesigner_Ressources/Icon_Library/stop_all.png +0 -0
  292. pymodaq/resources/QtDesigner_Ressources/Icon_Library/sum.png +0 -0
  293. pymodaq/resources/QtDesigner_Ressources/Icon_Library/surfacePlot.png +0 -0
  294. pymodaq/resources/QtDesigner_Ressources/Icon_Library/tree.png +0 -0
  295. pymodaq/resources/QtDesigner_Ressources/Icon_Library/updateTree.png +0 -0
  296. pymodaq/resources/QtDesigner_Ressources/Icon_Library/utility2.png +0 -0
  297. pymodaq/resources/QtDesigner_Ressources/Icon_Library/utility_small.png +0 -0
  298. pymodaq/resources/QtDesigner_Ressources/Icon_Library/vector.png +0 -0
  299. pymodaq/resources/QtDesigner_Ressources/Icon_Library/verify.png +0 -0
  300. pymodaq/resources/QtDesigner_Ressources/Icon_Library/video.png +0 -0
  301. pymodaq/resources/QtDesigner_Ressources/Icon_Library/wait.png +0 -0
  302. pymodaq/resources/QtDesigner_Ressources/Icon_Library/waterfallPlot.png +0 -0
  303. pymodaq/resources/QtDesigner_Ressources/Icon_Library/watershed.png +0 -0
  304. pymodaq/resources/QtDesigner_Ressources/Icon_Library/yellow_light.png +0 -0
  305. pymodaq/resources/QtDesigner_Ressources/Icon_Library/zip_file.png +0 -0
  306. pymodaq/resources/QtDesigner_Ressources/Icon_Library/zoomAuto.png +0 -0
  307. pymodaq/resources/QtDesigner_Ressources/Icon_Library/zoomReset.png +0 -0
  308. pymodaq/resources/QtDesigner_Ressources/QtDesigner_ressources.bat +0 -2
  309. pymodaq/resources/QtDesigner_Ressources/QtDesigner_ressources.qrc +0 -234
  310. pymodaq/resources/QtDesigner_Ressources/QtDesigner_ressources_rc.py +0 -127150
  311. pymodaq/resources/QtDesigner_Ressources/icons.svg +0 -142
  312. pymodaq/resources/VERSION +0 -1
  313. pymodaq/resources/config_template.toml +0 -94
  314. pymodaq/resources/triangulation_data.npy +0 -0
  315. pymodaq/utils/abstract/__init__.py +0 -48
  316. pymodaq/utils/db/__init__.py +0 -0
  317. pymodaq/utils/db/db_logger/__init__.py +0 -0
  318. pymodaq/utils/enums.py +0 -76
  319. pymodaq/utils/factory.py +0 -82
  320. pymodaq/utils/gui_utils/custom_app.py +0 -133
  321. pymodaq/utils/gui_utils/dock.py +0 -107
  322. pymodaq/utils/gui_utils/file_io.py +0 -93
  323. pymodaq/utils/gui_utils/layout.py +0 -34
  324. pymodaq/utils/gui_utils/list_picker.py +0 -38
  325. pymodaq/utils/gui_utils/widgets/__init__.py +0 -5
  326. pymodaq/utils/gui_utils/widgets/label.py +0 -24
  327. pymodaq/utils/gui_utils/widgets/lcd.py +0 -111
  328. pymodaq/utils/gui_utils/widgets/push.py +0 -149
  329. pymodaq/utils/gui_utils/widgets/qled.py +0 -62
  330. pymodaq/utils/gui_utils/widgets/spinbox.py +0 -24
  331. pymodaq/utils/gui_utils/widgets/table.py +0 -263
  332. pymodaq/utils/gui_utils/widgets/tree_layout.py +0 -188
  333. pymodaq/utils/gui_utils/widgets/tree_toml.py +0 -102
  334. pymodaq/utils/h5modules/backends.py +0 -1022
  335. pymodaq/utils/h5modules/browsing.py +0 -625
  336. pymodaq/utils/h5modules/data_saving.py +0 -1105
  337. pymodaq/utils/h5modules/exporter.py +0 -119
  338. pymodaq/utils/h5modules/exporters/__init__.py +0 -0
  339. pymodaq/utils/h5modules/exporters/base.py +0 -111
  340. pymodaq/utils/h5modules/exporters/flimj.py +0 -63
  341. pymodaq/utils/h5modules/exporters/hyperspy.py +0 -143
  342. pymodaq/utils/h5modules/saving.py +0 -866
  343. pymodaq/utils/h5modules/utils.py +0 -115
  344. pymodaq/utils/managers/action_manager.py +0 -489
  345. pymodaq/utils/managers/parameter_manager.py +0 -282
  346. pymodaq/utils/managers/roi_manager.py +0 -726
  347. pymodaq/utils/messenger.py +0 -66
  348. pymodaq/utils/parameter/ioxml.py +0 -542
  349. pymodaq/utils/parameter/pymodaq_ptypes/__init__.py +0 -38
  350. pymodaq/utils/parameter/pymodaq_ptypes/bool.py +0 -31
  351. pymodaq/utils/parameter/pymodaq_ptypes/date.py +0 -126
  352. pymodaq/utils/parameter/pymodaq_ptypes/filedir.py +0 -143
  353. pymodaq/utils/parameter/pymodaq_ptypes/itemselect.py +0 -265
  354. pymodaq/utils/parameter/pymodaq_ptypes/led.py +0 -44
  355. pymodaq/utils/parameter/pymodaq_ptypes/list.py +0 -150
  356. pymodaq/utils/parameter/pymodaq_ptypes/numeric.py +0 -18
  357. pymodaq/utils/parameter/pymodaq_ptypes/pixmap.py +0 -175
  358. pymodaq/utils/parameter/pymodaq_ptypes/slide.py +0 -145
  359. pymodaq/utils/parameter/pymodaq_ptypes/table.py +0 -135
  360. pymodaq/utils/parameter/pymodaq_ptypes/tableview.py +0 -149
  361. pymodaq/utils/parameter/pymodaq_ptypes/text.py +0 -142
  362. pymodaq/utils/plotting/__init__.py +0 -0
  363. pymodaq/utils/plotting/data_viewers/__init__.py +0 -10
  364. pymodaq/utils/plotting/data_viewers/base.py +0 -286
  365. pymodaq/utils/plotting/data_viewers/viewer.py +0 -274
  366. pymodaq/utils/plotting/data_viewers/viewer0D.py +0 -298
  367. pymodaq/utils/plotting/data_viewers/viewer1D.py +0 -826
  368. pymodaq/utils/plotting/data_viewers/viewer1Dbasic.py +0 -231
  369. pymodaq/utils/plotting/data_viewers/viewer2D.py +0 -1118
  370. pymodaq/utils/plotting/data_viewers/viewer2D_basic.py +0 -146
  371. pymodaq/utils/plotting/data_viewers/viewerND.py +0 -800
  372. pymodaq/utils/plotting/gant_chart.py +0 -123
  373. pymodaq/utils/plotting/image_viewer.py +0 -97
  374. pymodaq/utils/plotting/items/__init__.py +0 -0
  375. pymodaq/utils/plotting/items/axis_scaled.py +0 -93
  376. pymodaq/utils/plotting/items/crosshair.py +0 -94
  377. pymodaq/utils/plotting/items/image.py +0 -388
  378. pymodaq/utils/plotting/navigator.py +0 -353
  379. pymodaq/utils/plotting/plotter/plotter.py +0 -94
  380. pymodaq/utils/plotting/plotter/plotters/__init__.py +0 -0
  381. pymodaq/utils/plotting/plotter/plotters/matplotlib_plotters.py +0 -134
  382. pymodaq/utils/plotting/plotter/plotters/qt_plotters.py +0 -78
  383. pymodaq/utils/plotting/utils/__init__.py +0 -0
  384. pymodaq/utils/plotting/utils/axes_viewer.py +0 -88
  385. pymodaq/utils/plotting/utils/filter.py +0 -585
  386. pymodaq/utils/plotting/utils/lineout.py +0 -226
  387. pymodaq/utils/plotting/utils/plot_utils.py +0 -579
  388. pymodaq/utils/plotting/utils/signalND.py +0 -1347
  389. pymodaq/utils/plotting/widgets.py +0 -76
  390. pymodaq/utils/qvariant.py +0 -12
  391. pymodaq/utils/slicing.py +0 -63
  392. pymodaq/utils/units.py +0 -216
  393. pymodaq-4.2.4.dist-info/RECORD +0 -438
  394. /pymodaq/{post_treatment/daq_analysis → extensions/daq_logger}/__init__.py +0 -0
  395. /pymodaq/{utils/abstract/logger.py → extensions/daq_logger/abstract.py} +0 -0
  396. /pymodaq/{resources/QtDesigner_Ressources → extensions/daq_logger/db}/__init__.py +0 -0
  397. {pymodaq-4.2.4.dist-info → pymodaq-5.0.0.dist-info}/WHEEL +0 -0
  398. {pymodaq-4.2.4.dist-info → pymodaq-5.0.0.dist-info}/entry_points.txt +0 -0
  399. {pymodaq-4.2.4.dist-info → pymodaq-5.0.0.dist-info}/licenses/LICENSE +0 -0
@@ -1,263 +0,0 @@
1
- import copy
2
-
3
- import numpy as np
4
- from qtpy.QtCore import QLocale, Qt, QModelIndex
5
- from pymodaq.utils import daq_utils as utils
6
- from pymodaq.utils.qvariant import QVariant
7
- from qtpy import QtWidgets, QtCore
8
-
9
-
10
- class TableView(QtWidgets.QTableView):
11
- def __init__(self, *args, **kwargs):
12
- QLocale.setDefault(QLocale(QLocale.English, QLocale.UnitedStates))
13
- super().__init__(*args, **kwargs)
14
- self.setupview()
15
-
16
- def setupview(self):
17
- self.setStyle(MyStyle())
18
-
19
- self.verticalHeader().hide()
20
- self.horizontalHeader().hide()
21
- self.horizontalHeader().setStretchLastSection(True)
22
-
23
- self.setSelectionBehavior(QtWidgets.QTableView.SelectRows)
24
- self.setSelectionMode(QtWidgets.QTableView.SingleSelection)
25
-
26
- self.setDragEnabled(True)
27
- self.setDropIndicatorShown(True)
28
- self.setAcceptDrops(True)
29
- self.viewport().setAcceptDrops(True)
30
- self.setDefaultDropAction(QtCore.Qt.MoveAction)
31
- self.setDragDropMode(QtWidgets.QTableView.InternalMove)
32
- self.setDragDropOverwriteMode(False)
33
-
34
-
35
- class TableModel(QtCore.QAbstractTableModel):
36
-
37
- def __init__(self, data, header, editable=True, parent=None, show_checkbox=False):
38
- QLocale.setDefault(QLocale(QLocale.English, QLocale.UnitedStates))
39
- super().__init__(parent)
40
- if isinstance(data, np.ndarray):
41
- data_tot = []
42
- for dat in data:
43
- data_tot.append([float(d) for d in dat])
44
- data = data_tot
45
- self._data = data # stored data as a list of list
46
- self._checked = [False for _ in range(len(self._data))]
47
- self._show_checkbox = show_checkbox
48
- self.data_tmp = None
49
- self.header = header
50
- if not isinstance(editable, list):
51
- self.editable = [editable for h in header]
52
- else:
53
- self.editable = editable
54
-
55
- def __eq__(self, other):
56
- if isinstance(other, TableModel):
57
- return self._data == other._data
58
- else:
59
- return False
60
-
61
- def is_checked(self, row: int):
62
- return self._checked[row]
63
-
64
- @property
65
- def raw_data(self):
66
- return copy.deepcopy(self._data)
67
-
68
- def rowCount(self, parent):
69
- return len(self._data)
70
-
71
- def columnCount(self, parent):
72
- if self._data != []:
73
- return len(self._data[0])
74
- else:
75
- return 0
76
-
77
- def get_data(self, row, col):
78
- return self._data[row][col]
79
-
80
- def get_data_all(self):
81
- return self._data
82
-
83
- def clear(self):
84
- while self.rowCount(self.index(-1, -1)) > 0:
85
- self.remove_row(0)
86
-
87
- def set_data_all(self, data):
88
- self.clear()
89
- for row in data:
90
- self.insert_data(self.rowCount(self.index(-1, -1)), [float(d) for d in row])
91
-
92
- def data(self, index, role):
93
- if index.isValid():
94
- if role == Qt.DisplayRole or role == Qt.EditRole:
95
- dat = self._data[index.row()][index.column()]
96
- return dat
97
- elif role == Qt.CheckStateRole and index.column() == 0 and self._show_checkbox:
98
- if self._checked[index.row()]:
99
- return Qt.CheckState.Checked
100
- else:
101
- return Qt.CheckState.Unchecked
102
- return QVariant()
103
-
104
- # def setHeaderData(self, section, orientation, value):
105
- # if section == 2 and orientation == Qt.Horizontal:
106
- # names = self._data.columns
107
- # self._data = self._data.rename(columns={names[section]: value})
108
- # self.headerDataChanged.emit(orientation, 0, section)
109
-
110
- def headerData(self, section, orientation, role):
111
- if role == Qt.DisplayRole:
112
- if orientation == Qt.Horizontal:
113
- if section >= len(self.header):
114
- return QVariant()
115
- else:
116
- return self.header[section]
117
- else:
118
- return section
119
- else:
120
- return QVariant()
121
-
122
- def flags(self, index):
123
-
124
- f = Qt.ItemIsEnabled | Qt.ItemIsSelectable | Qt.ItemIsDragEnabled
125
- if index.column() < len(self.editable):
126
- if self.editable[index.column()]:
127
- f |= Qt.ItemIsEditable
128
- if index.column() == 0:
129
- f |= Qt.ItemIsUserCheckable
130
-
131
- if not index.isValid():
132
- f |= Qt.ItemIsDropEnabled
133
- return f
134
-
135
- def supportedDropActions(self):
136
- return Qt.MoveAction | Qt.CopyAction
137
-
138
- def validate_data(self, row, col, value):
139
- """
140
- to be subclassed in order to validate ranges of values for the cell defined by index
141
- Parameters
142
- ----------
143
- index: (QModelIndex)
144
- value: (str or float or int or ...)
145
-
146
-
147
- Returns
148
- -------
149
- bool: True if value is valid for the given row and col
150
- """
151
- return True
152
-
153
- def setData(self, index, value, role):
154
- if index.isValid():
155
- if role == Qt.EditRole:
156
- if self.validate_data(index.row(), index.column(), value):
157
- self._data[index.row()][index.column()] = value
158
- self.dataChanged.emit(index, index, [role])
159
- return True
160
-
161
- else:
162
- return False
163
- elif role == Qt.CheckStateRole:
164
- self._checked[index.row()] = True if value == Qt.CheckState.Checked else False
165
- self.dataChanged.emit(index, index, [role])
166
- return True
167
- return False
168
-
169
- def dropMimeData(self, data, action, row, column, parent):
170
- if row == -1:
171
- row = self.rowCount(parent)
172
-
173
- self.data_tmp = [dat[2] for dat in utils.decode_data(data.data("application/x-qabstractitemmodeldatalist"))]
174
- self.insertRows(row, 1, parent)
175
- return True
176
-
177
- def insert_data(self, row, data):
178
- self.data_tmp = data
179
- self.insertRows(row, 1, self.index(-1, -1))
180
-
181
- def insertRows(self, row, count, parent):
182
- self.beginInsertRows(QtCore.QModelIndex(), row, row + count - 1)
183
- for ind in range(count):
184
- self._data.insert(row + ind, self.data_tmp)
185
- self._checked.insert(row + ind, False)
186
- self.endInsertRows()
187
- return True
188
-
189
- def remove_row(self, row):
190
- self.removeRows(row, 1, self.index(-1, -1))
191
-
192
- def removeRows(self, row, count, parent):
193
- self.beginRemoveRows(QModelIndex(), row, row + count - 1)
194
- for ind in range(count):
195
- self._data.pop(row + ind)
196
- self._checked.pop(row + ind)
197
- self.endRemoveRows()
198
- return True
199
-
200
-
201
- class BooleanDelegate(QtWidgets.QItemEditorFactory):
202
- """
203
- TO implement custom widget editor for cells in a tableview
204
- """
205
- def createEditor(self, userType, parent):
206
- boolean = QtWidgets.QCheckBox(parent)
207
- return boolean
208
-
209
-
210
- class SpinBoxDelegate(QtWidgets.QItemEditorFactory):
211
- def __init__(self, decimals=4, min=-1e6, max=1e6):
212
- self.decimals = decimals
213
- self.min = min
214
- self.max = max
215
- super().__init__()
216
-
217
- def createEditor(self, userType, parent):
218
- doubleSpinBox = QtWidgets.QDoubleSpinBox(parent)
219
- doubleSpinBox.setDecimals(self.decimals)
220
- doubleSpinBox.setMaximum(self.min)
221
- doubleSpinBox.setMaximum(self.max)
222
- return doubleSpinBox
223
-
224
-
225
- class MyStyle(QtWidgets.QProxyStyle):
226
-
227
- def drawPrimitive(self, element, option, painter, widget=None):
228
- """
229
- Draw a line across the entire row rather than just the column
230
- we're hovering over. This may not always work depending on global
231
- style - for instance I think it won't work on OSX.
232
- """
233
- if element == self.PE_IndicatorItemViewItemDrop and not option.rect.isNull():
234
- option_new = QtWidgets.QStyleOption(option)
235
- option_new.rect.setLeft(0)
236
- if widget:
237
- option_new.rect.setRight(widget.width())
238
- option = option_new
239
- super().drawPrimitive(element, option, painter, widget)
240
-
241
-
242
- if __name__ == '__main__':
243
- import sys
244
-
245
- app = QtWidgets.QApplication([])
246
- w = QtWidgets.QMainWindow()
247
- table = TableView(w)
248
- styledItemDelegate = QtWidgets.QStyledItemDelegate()
249
- # styledItemDelegate.setItemEditorFactory(SpinBoxDelegate())
250
- styledItemDelegate.setItemEditorFactory(BooleanDelegate())
251
- #table.setItemDelegate(styledItemDelegate)
252
-
253
- table.setModel(TableModel([[name, True, False, 1.2] for name in ['X_axis', 'Y_axis', 'theta_axis']],
254
- header=['Actuator', 'Start', 'Stop', 'Step'],
255
- editable=[False, True, True, True]))
256
- w.setCentralWidget(table)
257
- w.show()
258
- #
259
- #
260
- # c = TreeFromToml()
261
- # c.show_dialog()
262
-
263
- sys.exit(app.exec_())
@@ -1,188 +0,0 @@
1
- from qtpy import QtWidgets, QtCore, QtGui
2
- from qtpy.QtCore import QObject, Signal, QLocale
3
- import sys
4
-
5
-
6
- class TreeLayout(QObject):
7
- """
8
- qtpy class object based on QtreeWidget
9
- The function populate_tree has to be used in order to populate the tree with structure as nested lists of dicts
10
-
11
- """
12
- status_sig = Signal(str)
13
- item_clicked_sig = Signal(object)
14
- item_double_clicked_sig = Signal(object)
15
-
16
- def __init__(self, parent=None, col_counts=1, labels=None):
17
-
18
- super().__init__()
19
-
20
- if parent is None:
21
- parent = QtWidgets.QWidget()
22
- self.parent = parent
23
-
24
- self.setupUi()
25
-
26
- self.tree.setColumnCount(col_counts)
27
- if labels is not None:
28
- self.tree.setHeaderLabels(labels)
29
-
30
- self.open_tree_pb.clicked.connect(self.expand_all)
31
- self.close_tree_pb.clicked.connect(self.collapse_all)
32
- self.open_tree_selected_pb.clicked.connect(self.open_tree_selection)
33
-
34
- self.tree.itemClicked.connect(self.item_clicked_sig.emit)
35
- self.tree.itemDoubleClicked.connect(self.item_double_clicked_sig.emit)
36
-
37
- def _current_text(self, col_index: int = 2):
38
- return self.tree.currentItem().text(col_index)
39
-
40
- def current_node_path(self):
41
- return self._current_text(2)
42
-
43
- def expand_all(self):
44
- self.tree.expandAll()
45
-
46
- def collapse_all(self):
47
- self.tree.collapseAll()
48
-
49
- @property
50
- def treewidget(self):
51
- return self.tree
52
-
53
- def setupUi(self):
54
- vlayout = QtWidgets.QVBoxLayout()
55
- hlayout = QtWidgets.QHBoxLayout()
56
-
57
- self.tree = CustomTree()
58
- vlayout.addWidget(self.tree)
59
-
60
- iconopen = QtGui.QIcon()
61
- iconopen.addPixmap(QtGui.QPixmap(":/icons/Icon_Library/tree.png"), QtGui.QIcon.Normal,
62
- QtGui.QIcon.Off)
63
- self.open_tree_pb = QtWidgets.QPushButton('Open Tree')
64
- self.open_tree_pb.setIcon(iconopen)
65
-
66
- iconopensel = QtGui.QIcon()
67
- iconopensel.addPixmap(QtGui.QPixmap(":/icons/Icon_Library/tree.png"), QtGui.QIcon.Normal,
68
- QtGui.QIcon.Off)
69
- self.open_tree_selected_pb = QtWidgets.QPushButton('Open Selected')
70
- self.open_tree_selected_pb.setIcon(iconopensel)
71
-
72
- iconclose = QtGui.QIcon()
73
- iconclose.addPixmap(QtGui.QPixmap(":/icons/Icon_Library/CollapseAll.png"), QtGui.QIcon.Normal,
74
- QtGui.QIcon.Off)
75
- self.close_tree_pb = QtWidgets.QPushButton('Close Tree')
76
- self.close_tree_pb.setIcon(iconclose)
77
-
78
- hlayout.addWidget(self.open_tree_pb)
79
- hlayout.addWidget(self.open_tree_selected_pb)
80
- hlayout.addWidget(self.close_tree_pb)
81
-
82
- vlayout.addLayout(hlayout)
83
-
84
- self.parent.setLayout(vlayout)
85
-
86
- def open_tree_selection(self):
87
- self.tree_open_children(self.tree.selectedIndexes()[0])
88
-
89
- def tree_open_children(self, item_index):
90
- try:
91
- if not (item_index.isValid()):
92
- return
93
-
94
- self.tree.expand(item_index)
95
- except Exception as e:
96
- self.status_sig.emit(str(e))
97
-
98
- def tree_open_parents(self, item_index):
99
- try:
100
- if not (item_index.isValid()):
101
- return
102
- flag = True
103
- empty = QtCore.QModelIndex()
104
- parent = item_index
105
- while flag:
106
- parent = parent.parent()
107
- if parent != empty:
108
- self.tree.expand(parent)
109
- else:
110
- flag = False
111
- break
112
- except Exception as e:
113
- self.status_sig.emit(str(e))
114
-
115
- def populate_tree(self, data_dict):
116
- try:
117
- parents = []
118
- for data in data_dict:
119
- str_list = [str(data['name'])]
120
- if 'filename' in data.keys():
121
- str_list.append(data['filename'])
122
- if 'info' in data.keys():
123
- str_list.append(data['info'])
124
- parent = QtWidgets.QTreeWidgetItem(str_list)
125
- Items = self.populate_sub_tree(data['contents'])
126
- parent.addChildren(Items)
127
- parents.append(parent)
128
-
129
- self.tree.addTopLevelItems(parents)
130
- except Exception as e:
131
- self.status_sig.emit(str(e))
132
-
133
- def populate_sub_tree(self, datas):
134
- try:
135
- parents = []
136
- for data in datas:
137
- str_list = [str(data['name'])]
138
- if 'filename' in data.keys():
139
- str_list.append(data['filename'])
140
- if 'info' in data.keys():
141
- str_list.append(data['info'])
142
- parent = QtWidgets.QTreeWidgetItem(str_list)
143
- if 'contents' in data.keys():
144
- if type(data['contents']) == list:
145
- Items = self.populate_sub_tree(data['contents'])
146
- parent.addChildren(Items)
147
- parents.append(parent)
148
- return parents
149
- except Exception as e:
150
- self.status_sig.emit(str(e))
151
- return parents
152
-
153
-
154
- class CustomTree(QtWidgets.QTreeWidget):
155
-
156
- def __init__(self, parent=None):
157
- super().__init__(parent)
158
- self.setContextMenuPolicy(QtCore.Qt.ActionsContextMenu)
159
-
160
-
161
- if __name__ == '__main__':
162
-
163
-
164
- app = QtWidgets.QApplication(sys.argv)
165
- Form = QtWidgets.QWidget()
166
- prog = TreeLayout(Form, col_counts=2, labels=["Material", "File"])
167
-
168
- # example of actions to add to the tree widget in order to show a context menu
169
- detector_action = QtWidgets.QAction("Grab from camera", None)
170
- prog.tree.addAction(detector_action)
171
- ########################
172
-
173
- Form.show()
174
- data = [dict(name='papa', contents=[
175
- dict(name='fiston', contents=[dict(name='subfiston', contents='baby', filename='Cest pas sorcier')]),
176
- dict(name='fiston1', contents=[dict(name='subfiston', contents='baby', filename='Cest pas malin')]),
177
- dict(name='fiston2', contents=[dict(name='subfiston', contents='baby', filename='Cest pas normal')])]),
178
- dict(name='maman', contents=[dict(name='fistone', contents=[dict(name='subfistone', contents='baby')])])]
179
- prog.populate_tree(data)
180
- # filename='C:\\Data\\2019\\20190220\\Dataset_20190220_004\\Dataset_20190220_004.h5'
181
- # import tables
182
- # h5_file = tables.open_file(filename, mode = "a")
183
- # for node in h5_file.walk_nodes():
184
- # print(node)
185
- # base_node = h5_file.root
186
- # base_tree_item, pixmap_items = h5tree_to_QTree(h5_file, base_node)
187
- # prog.ui.Tree.addTopLevelItem(base_tree_item)
188
- sys.exit(app.exec_())
@@ -1,102 +0,0 @@
1
- # -*- coding: utf-8 -*-
2
- """
3
- Created the 19/10/2023
4
-
5
- @author: Sebastien Weber
6
- """
7
- import datetime
8
-
9
- from qtpy import QtWidgets, QtCore
10
- from qtpy.QtCore import QObject
11
-
12
- from pymodaq.utils.parameter import ParameterTree, Parameter
13
- from pymodaq.utils.config import Config, create_toml_from_dict
14
-
15
-
16
- class TreeFromToml(QObject):
17
- def __init__(self, config: Config = None):
18
- super().__init__()
19
- if config is None:
20
- config = Config()
21
- self._config = config
22
- params = [{'title': 'Config path', 'name': 'config_path', 'type': 'str', 'value': str(self._config.config_path),
23
- 'readonly': True}]
24
- params.extend(self.dict_to_param(config.to_dict()))
25
-
26
- self.settings = Parameter.create(title='settings', name='settings', type='group', children=params)
27
- self.settings_tree = ParameterTree()
28
- self.settings_tree.setParameters(self.settings, showTop=False)
29
-
30
- def show_dialog(self):
31
-
32
- self.dialog = QtWidgets.QDialog()
33
- self.dialog.setWindowTitle('Please enter new configuration values!')
34
- self.dialog.setLayout(QtWidgets.QVBoxLayout())
35
- buttonBox = QtWidgets.QDialogButtonBox(parent=self.dialog)
36
-
37
- buttonBox.addButton('Save', buttonBox.AcceptRole)
38
- buttonBox.accepted.connect(self.dialog.accept)
39
- buttonBox.addButton('Cancel', buttonBox.RejectRole)
40
- buttonBox.rejected.connect(self.dialog.reject)
41
-
42
- self.dialog.layout().addWidget(self.settings_tree)
43
- self.dialog.layout().addWidget(buttonBox)
44
- self.dialog.setWindowTitle('Configuration entries')
45
- res = self.dialog.exec()
46
-
47
- if res == self.dialog.Accepted:
48
- with open(self._config.config_path, 'w') as f:
49
- config_dict = self.param_to_dict(self.settings)
50
- config_dict.pop('config_path')
51
- create_toml_from_dict(config_dict, self._config.config_path)
52
-
53
- @classmethod
54
- def param_to_dict(cls, param: Parameter) -> dict:
55
- config = dict()
56
- for child in param.children():
57
- if 'group' in child.opts['type']:
58
- config[child.name()] = cls.param_to_dict(child)
59
- else:
60
- if child.opts['type'] == 'datetime':
61
- config[child.name()] = datetime.fromtimestamp(
62
- child.value().toSecsSinceEpoch()) # convert QDateTime to python datetime
63
- elif child.opts['type'] == 'date':
64
- qdt = QtCore.QDateTime()
65
- qdt.setDate(child.value())
66
- pdt = datetime.fromtimestamp(qdt.toSecsSinceEpoch())
67
- config[child.name()] = pdt.date()
68
- elif child.opts['type'] == 'list':
69
- config[child.name()] = child.opts['limits']
70
- else:
71
- config[child.name()] = child.value()
72
- return config
73
-
74
- @classmethod
75
- def dict_to_param(cls, config: dict) -> Parameter:
76
- params = []
77
- for key in config:
78
- if isinstance(config[key], dict):
79
- params.append({'title': f'{key.capitalize()}:', 'name': key, 'type': 'group',
80
- 'children': cls.dict_to_param(config[key]),
81
- 'expanded': 'user' in key.lower() or 'general' in key.lower()})
82
- else:
83
- param = {'title': f'{key.capitalize()}:', 'name': key, 'value': config[key]}
84
- if isinstance(config[key], float):
85
- param['type'] = 'float'
86
- elif isinstance(config[key], bool): # placed before int because a bool is an instance of int
87
- param['type'] = 'bool'
88
- elif isinstance(config[key], int):
89
- param['type'] = 'int'
90
- elif isinstance(config[key], datetime.datetime):
91
- param['type'] = 'datetime'
92
- elif isinstance(config[key], datetime.date):
93
- param['type'] = 'date'
94
- elif isinstance(config[key], str):
95
- param['type'] = 'str'
96
- elif isinstance(config[key], list):
97
- param['type'] = 'list'
98
- param['limits'] = config[key]
99
- param['value'] = config[key][0]
100
- param['show_pb'] = True
101
- params.append(param)
102
- return params