pymodaq 4.2.3__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 +33 -16
  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 +166 -118
  11. pymodaq/examples/custom_app.py +13 -16
  12. pymodaq/examples/custom_viewer.py +7 -7
  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 -664
  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.3.dist-info → pymodaq-5.0.0.dist-info}/METADATA +5 -3
  76. pymodaq-5.0.0.dist-info/RECORD +123 -0
  77. {pymodaq-4.2.3.dist-info → pymodaq-5.0.0.dist-info}/WHEEL +1 -1
  78. pymodaq/post_treatment/process_to_scalar.py +0 -263
  79. pymodaq/resources/QtDesigner_Ressources/Icon_Library/1d.png +0 -0
  80. pymodaq/resources/QtDesigner_Ressources/Icon_Library/2d.png +0 -0
  81. pymodaq/resources/QtDesigner_Ressources/Icon_Library/3d.png +0 -0
  82. pymodaq/resources/QtDesigner_Ressources/Icon_Library/Add2.png +0 -0
  83. pymodaq/resources/QtDesigner_Ressources/Icon_Library/Add_Step.png +0 -0
  84. pymodaq/resources/QtDesigner_Ressources/Icon_Library/Approve.png +0 -0
  85. pymodaq/resources/QtDesigner_Ressources/Icon_Library/Approve_All.png +0 -0
  86. pymodaq/resources/QtDesigner_Ressources/Icon_Library/Browse_Dir_Path.png +0 -0
  87. pymodaq/resources/QtDesigner_Ressources/Icon_Library/Calculator.png +0 -0
  88. pymodaq/resources/QtDesigner_Ressources/Icon_Library/ChnGroup.png +0 -0
  89. pymodaq/resources/QtDesigner_Ressources/Icon_Library/ChnNum.png +0 -0
  90. pymodaq/resources/QtDesigner_Ressources/Icon_Library/ChnText.png +0 -0
  91. pymodaq/resources/QtDesigner_Ressources/Icon_Library/ChnTime.png +0 -0
  92. pymodaq/resources/QtDesigner_Ressources/Icon_Library/ChnWave.png +0 -0
  93. pymodaq/resources/QtDesigner_Ressources/Icon_Library/Close3.png +0 -0
  94. pymodaq/resources/QtDesigner_Ressources/Icon_Library/CollapseAll.png +0 -0
  95. pymodaq/resources/QtDesigner_Ressources/Icon_Library/CollapseAll_32.png +0 -0
  96. pymodaq/resources/QtDesigner_Ressources/Icon_Library/ColorPicker.png +0 -0
  97. pymodaq/resources/QtDesigner_Ressources/Icon_Library/Contract.png +0 -0
  98. pymodaq/resources/QtDesigner_Ressources/Icon_Library/Create.png +0 -0
  99. pymodaq/resources/QtDesigner_Ressources/Icon_Library/DeleteLayer.png +0 -0
  100. pymodaq/resources/QtDesigner_Ressources/Icon_Library/EditOpen.png +0 -0
  101. pymodaq/resources/QtDesigner_Ressources/Icon_Library/EditRedo.png +0 -0
  102. pymodaq/resources/QtDesigner_Ressources/Icon_Library/EditUndo.png +0 -0
  103. pymodaq/resources/QtDesigner_Ressources/Icon_Library/Ellipse.png +0 -0
  104. pymodaq/resources/QtDesigner_Ressources/Icon_Library/EllipseFilled.png +0 -0
  105. pymodaq/resources/QtDesigner_Ressources/Icon_Library/Error.png +0 -0
  106. pymodaq/resources/QtDesigner_Ressources/Icon_Library/ErrorMessage.png +0 -0
  107. pymodaq/resources/QtDesigner_Ressources/Icon_Library/Error_16.png +0 -0
  108. pymodaq/resources/QtDesigner_Ressources/Icon_Library/Exit.png +0 -0
  109. pymodaq/resources/QtDesigner_Ressources/Icon_Library/Expand.png +0 -0
  110. pymodaq/resources/QtDesigner_Ressources/Icon_Library/ExpandAll.png +0 -0
  111. pymodaq/resources/QtDesigner_Ressources/Icon_Library/ExpandAll_32.png +0 -0
  112. pymodaq/resources/QtDesigner_Ressources/Icon_Library/FFT.png +0 -0
  113. pymodaq/resources/QtDesigner_Ressources/Icon_Library/HLM.ico +0 -0
  114. pymodaq/resources/QtDesigner_Ressources/Icon_Library/Help.png +0 -0
  115. pymodaq/resources/QtDesigner_Ressources/Icon_Library/Help_32.png +0 -0
  116. pymodaq/resources/QtDesigner_Ressources/Icon_Library/Histogram.png +0 -0
  117. pymodaq/resources/QtDesigner_Ressources/Icon_Library/LUT_LookUpTable.png +0 -0
  118. pymodaq/resources/QtDesigner_Ressources/Icon_Library/MagnifyingGlass.png +0 -0
  119. pymodaq/resources/QtDesigner_Ressources/Icon_Library/MagnifyingGlass_24.png +0 -0
  120. pymodaq/resources/QtDesigner_Ressources/Icon_Library/Marker.png +0 -0
  121. pymodaq/resources/QtDesigner_Ressources/Icon_Library/Math.png +0 -0
  122. pymodaq/resources/QtDesigner_Ressources/Icon_Library/MeasurementStudio_32.png +0 -0
  123. pymodaq/resources/QtDesigner_Ressources/Icon_Library/Move.png +0 -0
  124. pymodaq/resources/QtDesigner_Ressources/Icon_Library/MoveDown.png +0 -0
  125. pymodaq/resources/QtDesigner_Ressources/Icon_Library/MoveUp.png +0 -0
  126. pymodaq/resources/QtDesigner_Ressources/Icon_Library/Multiply.png +0 -0
  127. pymodaq/resources/QtDesigner_Ressources/Icon_Library/NewFile.png +0 -0
  128. pymodaq/resources/QtDesigner_Ressources/Icon_Library/NewLayer.png +0 -0
  129. pymodaq/resources/QtDesigner_Ressources/Icon_Library/New_File.png +0 -0
  130. pymodaq/resources/QtDesigner_Ressources/Icon_Library/New_Folder.png +0 -0
  131. pymodaq/resources/QtDesigner_Ressources/Icon_Library/Open.png +0 -0
  132. pymodaq/resources/QtDesigner_Ressources/Icon_Library/Open_1D.png +0 -0
  133. pymodaq/resources/QtDesigner_Ressources/Icon_Library/Open_2D.png +0 -0
  134. pymodaq/resources/QtDesigner_Ressources/Icon_Library/Open_File.png +0 -0
  135. pymodaq/resources/QtDesigner_Ressources/Icon_Library/Open_File_32.png +0 -0
  136. pymodaq/resources/QtDesigner_Ressources/Icon_Library/Open_sim.png +0 -0
  137. pymodaq/resources/QtDesigner_Ressources/Icon_Library/Options.png +0 -0
  138. pymodaq/resources/QtDesigner_Ressources/Icon_Library/Oscilloscope.png +0 -0
  139. pymodaq/resources/QtDesigner_Ressources/Icon_Library/Oscilloscope_16.png +0 -0
  140. pymodaq/resources/QtDesigner_Ressources/Icon_Library/Pass.png +0 -0
  141. pymodaq/resources/QtDesigner_Ressources/Icon_Library/RGB.png +0 -0
  142. pymodaq/resources/QtDesigner_Ressources/Icon_Library/Rectangle.png +0 -0
  143. pymodaq/resources/QtDesigner_Ressources/Icon_Library/RectangleFilled.png +0 -0
  144. pymodaq/resources/QtDesigner_Ressources/Icon_Library/Redo.png +0 -0
  145. pymodaq/resources/QtDesigner_Ressources/Icon_Library/Refresh.png +0 -0
  146. pymodaq/resources/QtDesigner_Ressources/Icon_Library/Refresh2.png +0 -0
  147. pymodaq/resources/QtDesigner_Ressources/Icon_Library/Refresh_32.png +0 -0
  148. pymodaq/resources/QtDesigner_Ressources/Icon_Library/Region.png +0 -0
  149. pymodaq/resources/QtDesigner_Ressources/Icon_Library/Rendezvous.png +0 -0
  150. pymodaq/resources/QtDesigner_Ressources/Icon_Library/SELECT.png +0 -0
  151. pymodaq/resources/QtDesigner_Ressources/Icon_Library/Save.png +0 -0
  152. pymodaq/resources/QtDesigner_Ressources/Icon_Library/SaveAll.png +0 -0
  153. pymodaq/resources/QtDesigner_Ressources/Icon_Library/SaveAll_32.png +0 -0
  154. pymodaq/resources/QtDesigner_Ressources/Icon_Library/SaveAs.png +0 -0
  155. pymodaq/resources/QtDesigner_Ressources/Icon_Library/SaveAs_32.png +0 -0
  156. pymodaq/resources/QtDesigner_Ressources/Icon_Library/Save_24.png +0 -0
  157. pymodaq/resources/QtDesigner_Ressources/Icon_Library/Save_32.png +0 -0
  158. pymodaq/resources/QtDesigner_Ressources/Icon_Library/Search.png +0 -0
  159. pymodaq/resources/QtDesigner_Ressources/Icon_Library/SelectPolygon.png +0 -0
  160. pymodaq/resources/QtDesigner_Ressources/Icon_Library/Select_24.png +0 -0
  161. pymodaq/resources/QtDesigner_Ressources/Icon_Library/Settings.png +0 -0
  162. pymodaq/resources/QtDesigner_Ressources/Icon_Library/Snap&Save.png +0 -0
  163. pymodaq/resources/QtDesigner_Ressources/Icon_Library/Snapshot.png +0 -0
  164. pymodaq/resources/QtDesigner_Ressources/Icon_Library/Snapshot2.png +0 -0
  165. pymodaq/resources/QtDesigner_Ressources/Icon_Library/Snapshot2_16.png +0 -0
  166. pymodaq/resources/QtDesigner_Ressources/Icon_Library/Snapshot2_32.png +0 -0
  167. pymodaq/resources/QtDesigner_Ressources/Icon_Library/Spreadsheet.png +0 -0
  168. pymodaq/resources/QtDesigner_Ressources/Icon_Library/Statistics.png +0 -0
  169. pymodaq/resources/QtDesigner_Ressources/Icon_Library/Statistics2.png +0 -0
  170. pymodaq/resources/QtDesigner_Ressources/Icon_Library/Status.png +0 -0
  171. pymodaq/resources/QtDesigner_Ressources/Icon_Library/Subtract.png +0 -0
  172. pymodaq/resources/QtDesigner_Ressources/Icon_Library/Vision.png +0 -0
  173. pymodaq/resources/QtDesigner_Ressources/Icon_Library/Volts.png +0 -0
  174. pymodaq/resources/QtDesigner_Ressources/Icon_Library/Wait2.png +0 -0
  175. pymodaq/resources/QtDesigner_Ressources/Icon_Library/Zoom_1_1.png +0 -0
  176. pymodaq/resources/QtDesigner_Ressources/Icon_Library/Zoom_in.png +0 -0
  177. pymodaq/resources/QtDesigner_Ressources/Icon_Library/Zoom_out.png +0 -0
  178. pymodaq/resources/QtDesigner_Ressources/Icon_Library/Zoom_to_Selection.png +0 -0
  179. pymodaq/resources/QtDesigner_Ressources/Icon_Library/abort.png +0 -0
  180. pymodaq/resources/QtDesigner_Ressources/Icon_Library/advanced2.png +0 -0
  181. pymodaq/resources/QtDesigner_Ressources/Icon_Library/autoscale.png +0 -0
  182. pymodaq/resources/QtDesigner_Ressources/Icon_Library/b_icon.png +0 -0
  183. pymodaq/resources/QtDesigner_Ressources/Icon_Library/back.png +0 -0
  184. pymodaq/resources/QtDesigner_Ressources/Icon_Library/bg_icon.png +0 -0
  185. pymodaq/resources/QtDesigner_Ressources/Icon_Library/camera.png +0 -0
  186. pymodaq/resources/QtDesigner_Ressources/Icon_Library/camera_snap.png +0 -0
  187. pymodaq/resources/QtDesigner_Ressources/Icon_Library/cartesian.png +0 -0
  188. pymodaq/resources/QtDesigner_Ressources/Icon_Library/clear2.png +0 -0
  189. pymodaq/resources/QtDesigner_Ressources/Icon_Library/clear_ROI.png +0 -0
  190. pymodaq/resources/QtDesigner_Ressources/Icon_Library/close2.png +0 -0
  191. pymodaq/resources/QtDesigner_Ressources/Icon_Library/cluster2.png +0 -0
  192. pymodaq/resources/QtDesigner_Ressources/Icon_Library/color.png +0 -0
  193. pymodaq/resources/QtDesigner_Ressources/Icon_Library/color2.png +0 -0
  194. pymodaq/resources/QtDesigner_Ressources/Icon_Library/continuous.png +0 -0
  195. pymodaq/resources/QtDesigner_Ressources/Icon_Library/data.png +0 -0
  196. pymodaq/resources/QtDesigner_Ressources/Icon_Library/delay.png +0 -0
  197. pymodaq/resources/QtDesigner_Ressources/Icon_Library/download.png +0 -0
  198. pymodaq/resources/QtDesigner_Ressources/Icon_Library/download2.png +0 -0
  199. pymodaq/resources/QtDesigner_Ressources/Icon_Library/error2.png +0 -0
  200. pymodaq/resources/QtDesigner_Ressources/Icon_Library/ethernet.png +0 -0
  201. pymodaq/resources/QtDesigner_Ressources/Icon_Library/exit2.png +0 -0
  202. pymodaq/resources/QtDesigner_Ressources/Icon_Library/fan.png +0 -0
  203. pymodaq/resources/QtDesigner_Ressources/Icon_Library/filter2.png +0 -0
  204. pymodaq/resources/QtDesigner_Ressources/Icon_Library/g_icon.png +0 -0
  205. pymodaq/resources/QtDesigner_Ressources/Icon_Library/gear2.png +0 -0
  206. pymodaq/resources/QtDesigner_Ressources/Icon_Library/go_to.png +0 -0
  207. pymodaq/resources/QtDesigner_Ressources/Icon_Library/go_to_1.png +0 -0
  208. pymodaq/resources/QtDesigner_Ressources/Icon_Library/go_to_2.png +0 -0
  209. pymodaq/resources/QtDesigner_Ressources/Icon_Library/grab.png +0 -0
  210. pymodaq/resources/QtDesigner_Ressources/Icon_Library/graph.png +0 -0
  211. pymodaq/resources/QtDesigner_Ressources/Icon_Library/greenLight2.png +0 -0
  212. pymodaq/resources/QtDesigner_Ressources/Icon_Library/greenLight2_32.png +0 -0
  213. pymodaq/resources/QtDesigner_Ressources/Icon_Library/green_light.png +0 -0
  214. pymodaq/resources/QtDesigner_Ressources/Icon_Library/grey_icon.png +0 -0
  215. pymodaq/resources/QtDesigner_Ressources/Icon_Library/greyscale.png +0 -0
  216. pymodaq/resources/QtDesigner_Ressources/Icon_Library/help1.png +0 -0
  217. pymodaq/resources/QtDesigner_Ressources/Icon_Library/help1_32.png +0 -0
  218. pymodaq/resources/QtDesigner_Ressources/Icon_Library/home2.png +0 -0
  219. pymodaq/resources/QtDesigner_Ressources/Icon_Library/information2.png +0 -0
  220. pymodaq/resources/QtDesigner_Ressources/Icon_Library/ini.png +0 -0
  221. pymodaq/resources/QtDesigner_Ressources/Icon_Library/integrator.png +0 -0
  222. pymodaq/resources/QtDesigner_Ressources/Icon_Library/joystick.png +0 -0
  223. pymodaq/resources/QtDesigner_Ressources/Icon_Library/light_green.png +0 -0
  224. pymodaq/resources/QtDesigner_Ressources/Icon_Library/light_green_16.png +0 -0
  225. pymodaq/resources/QtDesigner_Ressources/Icon_Library/light_red.png +0 -0
  226. pymodaq/resources/QtDesigner_Ressources/Icon_Library/light_red_16.png +0 -0
  227. pymodaq/resources/QtDesigner_Ressources/Icon_Library/light_yellow.png +0 -0
  228. pymodaq/resources/QtDesigner_Ressources/Icon_Library/light_yellow_16.png +0 -0
  229. pymodaq/resources/QtDesigner_Ressources/Icon_Library/limiter.png +0 -0
  230. pymodaq/resources/QtDesigner_Ressources/Icon_Library/load_ROI.png +0 -0
  231. pymodaq/resources/QtDesigner_Ressources/Icon_Library/meshPlot.png +0 -0
  232. pymodaq/resources/QtDesigner_Ressources/Icon_Library/meter.png +0 -0
  233. pymodaq/resources/QtDesigner_Ressources/Icon_Library/meter2.png +0 -0
  234. pymodaq/resources/QtDesigner_Ressources/Icon_Library/meter_32.png +0 -0
  235. pymodaq/resources/QtDesigner_Ressources/Icon_Library/move_contour.png +0 -0
  236. pymodaq/resources/QtDesigner_Ressources/Icon_Library/move_straight_line.png +0 -0
  237. pymodaq/resources/QtDesigner_Ressources/Icon_Library/movie.png +0 -0
  238. pymodaq/resources/QtDesigner_Ressources/Icon_Library/multi_point.png +0 -0
  239. pymodaq/resources/QtDesigner_Ressources/Icon_Library/multiplexer.png +0 -0
  240. pymodaq/resources/QtDesigner_Ressources/Icon_Library/new.png +0 -0
  241. pymodaq/resources/QtDesigner_Ressources/Icon_Library/openArrow.png +0 -0
  242. pymodaq/resources/QtDesigner_Ressources/Icon_Library/openTree.png +0 -0
  243. pymodaq/resources/QtDesigner_Ressources/Icon_Library/oscilloscope2.png +0 -0
  244. pymodaq/resources/QtDesigner_Ressources/Icon_Library/oscilloscope3.png +0 -0
  245. pymodaq/resources/QtDesigner_Ressources/Icon_Library/overlay.png +0 -0
  246. pymodaq/resources/QtDesigner_Ressources/Icon_Library/pass2.png +0 -0
  247. pymodaq/resources/QtDesigner_Ressources/Icon_Library/pass2_16.png +0 -0
  248. pymodaq/resources/QtDesigner_Ressources/Icon_Library/pass_32.png +0 -0
  249. pymodaq/resources/QtDesigner_Ressources/Icon_Library/pause.png +0 -0
  250. pymodaq/resources/QtDesigner_Ressources/Icon_Library/permute.png +0 -0
  251. pymodaq/resources/QtDesigner_Ressources/Icon_Library/phase.png +0 -0
  252. pymodaq/resources/QtDesigner_Ressources/Icon_Library/play.png +0 -0
  253. pymodaq/resources/QtDesigner_Ressources/Icon_Library/polar.png +0 -0
  254. pymodaq/resources/QtDesigner_Ressources/Icon_Library/pole_zero.png +0 -0
  255. pymodaq/resources/QtDesigner_Ressources/Icon_Library/powerMeter.png +0 -0
  256. pymodaq/resources/QtDesigner_Ressources/Icon_Library/powerSwitch.png +0 -0
  257. pymodaq/resources/QtDesigner_Ressources/Icon_Library/powerSwitch_16.png +0 -0
  258. pymodaq/resources/QtDesigner_Ressources/Icon_Library/print2.png +0 -0
  259. pymodaq/resources/QtDesigner_Ressources/Icon_Library/print2_32.png +0 -0
  260. pymodaq/resources/QtDesigner_Ressources/Icon_Library/properties.png +0 -0
  261. pymodaq/resources/QtDesigner_Ressources/Icon_Library/r_icon.png +0 -0
  262. pymodaq/resources/QtDesigner_Ressources/Icon_Library/radiocontrolbutton.png +0 -0
  263. pymodaq/resources/QtDesigner_Ressources/Icon_Library/read2.png +0 -0
  264. pymodaq/resources/QtDesigner_Ressources/Icon_Library/red_light.png +0 -0
  265. pymodaq/resources/QtDesigner_Ressources/Icon_Library/remove.png +0 -0
  266. pymodaq/resources/QtDesigner_Ressources/Icon_Library/reset.png +0 -0
  267. pymodaq/resources/QtDesigner_Ressources/Icon_Library/rgb_icon.png +0 -0
  268. pymodaq/resources/QtDesigner_Ressources/Icon_Library/robot.png +0 -0
  269. pymodaq/resources/QtDesigner_Ressources/Icon_Library/rotation2.png +0 -0
  270. pymodaq/resources/QtDesigner_Ressources/Icon_Library/run2.png +0 -0
  271. pymodaq/resources/QtDesigner_Ressources/Icon_Library/run_all.png +0 -0
  272. pymodaq/resources/QtDesigner_Ressources/Icon_Library/saturation.png +0 -0
  273. pymodaq/resources/QtDesigner_Ressources/Icon_Library/saveTree.png +0 -0
  274. pymodaq/resources/QtDesigner_Ressources/Icon_Library/save_ROI.png +0 -0
  275. pymodaq/resources/QtDesigner_Ressources/Icon_Library/scale_horizontally.png +0 -0
  276. pymodaq/resources/QtDesigner_Ressources/Icon_Library/scale_vertically.png +0 -0
  277. pymodaq/resources/QtDesigner_Ressources/Icon_Library/search2.png +0 -0
  278. pymodaq/resources/QtDesigner_Ressources/Icon_Library/select2.png +0 -0
  279. pymodaq/resources/QtDesigner_Ressources/Icon_Library/select_all.png +0 -0
  280. pymodaq/resources/QtDesigner_Ressources/Icon_Library/select_all2.png +0 -0
  281. pymodaq/resources/QtDesigner_Ressources/Icon_Library/select_none.png +0 -0
  282. pymodaq/resources/QtDesigner_Ressources/Icon_Library/sequence.png +0 -0
  283. pymodaq/resources/QtDesigner_Ressources/Icon_Library/sequence2.png +0 -0
  284. pymodaq/resources/QtDesigner_Ressources/Icon_Library/snap.png +0 -0
  285. pymodaq/resources/QtDesigner_Ressources/Icon_Library/sort_ascend.png +0 -0
  286. pymodaq/resources/QtDesigner_Ressources/Icon_Library/spectrumAnalyzer.png +0 -0
  287. pymodaq/resources/QtDesigner_Ressources/Icon_Library/start.png +0 -0
  288. pymodaq/resources/QtDesigner_Ressources/Icon_Library/status_cancelled.png +0 -0
  289. pymodaq/resources/QtDesigner_Ressources/Icon_Library/stop.png +0 -0
  290. pymodaq/resources/QtDesigner_Ressources/Icon_Library/stop2.png +0 -0
  291. pymodaq/resources/QtDesigner_Ressources/Icon_Library/stop3.png +0 -0
  292. pymodaq/resources/QtDesigner_Ressources/Icon_Library/stop_all.png +0 -0
  293. pymodaq/resources/QtDesigner_Ressources/Icon_Library/sum.png +0 -0
  294. pymodaq/resources/QtDesigner_Ressources/Icon_Library/surfacePlot.png +0 -0
  295. pymodaq/resources/QtDesigner_Ressources/Icon_Library/tree.png +0 -0
  296. pymodaq/resources/QtDesigner_Ressources/Icon_Library/updateTree.png +0 -0
  297. pymodaq/resources/QtDesigner_Ressources/Icon_Library/utility2.png +0 -0
  298. pymodaq/resources/QtDesigner_Ressources/Icon_Library/utility_small.png +0 -0
  299. pymodaq/resources/QtDesigner_Ressources/Icon_Library/vector.png +0 -0
  300. pymodaq/resources/QtDesigner_Ressources/Icon_Library/verify.png +0 -0
  301. pymodaq/resources/QtDesigner_Ressources/Icon_Library/video.png +0 -0
  302. pymodaq/resources/QtDesigner_Ressources/Icon_Library/wait.png +0 -0
  303. pymodaq/resources/QtDesigner_Ressources/Icon_Library/waterfallPlot.png +0 -0
  304. pymodaq/resources/QtDesigner_Ressources/Icon_Library/watershed.png +0 -0
  305. pymodaq/resources/QtDesigner_Ressources/Icon_Library/yellow_light.png +0 -0
  306. pymodaq/resources/QtDesigner_Ressources/Icon_Library/zip_file.png +0 -0
  307. pymodaq/resources/QtDesigner_Ressources/Icon_Library/zoomAuto.png +0 -0
  308. pymodaq/resources/QtDesigner_Ressources/Icon_Library/zoomReset.png +0 -0
  309. pymodaq/resources/QtDesigner_Ressources/QtDesigner_ressources.bat +0 -2
  310. pymodaq/resources/QtDesigner_Ressources/QtDesigner_ressources.qrc +0 -234
  311. pymodaq/resources/QtDesigner_Ressources/QtDesigner_ressources_rc.py +0 -127150
  312. pymodaq/resources/QtDesigner_Ressources/icons.svg +0 -142
  313. pymodaq/resources/VERSION +0 -1
  314. pymodaq/resources/config_template.toml +0 -90
  315. pymodaq/resources/triangulation_data.npy +0 -0
  316. pymodaq/utils/abstract/__init__.py +0 -48
  317. pymodaq/utils/db/__init__.py +0 -0
  318. pymodaq/utils/db/db_logger/__init__.py +0 -0
  319. pymodaq/utils/enums.py +0 -76
  320. pymodaq/utils/factory.py +0 -82
  321. pymodaq/utils/gui_utils/custom_app.py +0 -133
  322. pymodaq/utils/gui_utils/dock.py +0 -107
  323. pymodaq/utils/gui_utils/file_io.py +0 -93
  324. pymodaq/utils/gui_utils/layout.py +0 -34
  325. pymodaq/utils/gui_utils/list_picker.py +0 -38
  326. pymodaq/utils/gui_utils/widgets/__init__.py +0 -5
  327. pymodaq/utils/gui_utils/widgets/label.py +0 -24
  328. pymodaq/utils/gui_utils/widgets/lcd.py +0 -111
  329. pymodaq/utils/gui_utils/widgets/push.py +0 -149
  330. pymodaq/utils/gui_utils/widgets/qled.py +0 -62
  331. pymodaq/utils/gui_utils/widgets/spinbox.py +0 -24
  332. pymodaq/utils/gui_utils/widgets/table.py +0 -263
  333. pymodaq/utils/gui_utils/widgets/tree_layout.py +0 -188
  334. pymodaq/utils/gui_utils/widgets/tree_toml.py +0 -102
  335. pymodaq/utils/h5modules/backends.py +0 -1022
  336. pymodaq/utils/h5modules/browsing.py +0 -625
  337. pymodaq/utils/h5modules/data_saving.py +0 -1101
  338. pymodaq/utils/h5modules/exporter.py +0 -119
  339. pymodaq/utils/h5modules/exporters/__init__.py +0 -0
  340. pymodaq/utils/h5modules/exporters/base.py +0 -111
  341. pymodaq/utils/h5modules/exporters/flimj.py +0 -63
  342. pymodaq/utils/h5modules/exporters/hyperspy.py +0 -143
  343. pymodaq/utils/h5modules/saving.py +0 -866
  344. pymodaq/utils/h5modules/utils.py +0 -115
  345. pymodaq/utils/managers/action_manager.py +0 -489
  346. pymodaq/utils/managers/parameter_manager.py +0 -282
  347. pymodaq/utils/managers/roi_manager.py +0 -726
  348. pymodaq/utils/messenger.py +0 -66
  349. pymodaq/utils/parameter/ioxml.py +0 -542
  350. pymodaq/utils/parameter/pymodaq_ptypes/__init__.py +0 -38
  351. pymodaq/utils/parameter/pymodaq_ptypes/bool.py +0 -31
  352. pymodaq/utils/parameter/pymodaq_ptypes/date.py +0 -126
  353. pymodaq/utils/parameter/pymodaq_ptypes/filedir.py +0 -143
  354. pymodaq/utils/parameter/pymodaq_ptypes/itemselect.py +0 -265
  355. pymodaq/utils/parameter/pymodaq_ptypes/led.py +0 -44
  356. pymodaq/utils/parameter/pymodaq_ptypes/list.py +0 -150
  357. pymodaq/utils/parameter/pymodaq_ptypes/numeric.py +0 -18
  358. pymodaq/utils/parameter/pymodaq_ptypes/pixmap.py +0 -175
  359. pymodaq/utils/parameter/pymodaq_ptypes/slide.py +0 -145
  360. pymodaq/utils/parameter/pymodaq_ptypes/table.py +0 -135
  361. pymodaq/utils/parameter/pymodaq_ptypes/tableview.py +0 -149
  362. pymodaq/utils/parameter/pymodaq_ptypes/text.py +0 -142
  363. pymodaq/utils/plotting/__init__.py +0 -0
  364. pymodaq/utils/plotting/data_viewers/__init__.py +0 -10
  365. pymodaq/utils/plotting/data_viewers/base.py +0 -286
  366. pymodaq/utils/plotting/data_viewers/viewer.py +0 -274
  367. pymodaq/utils/plotting/data_viewers/viewer0D.py +0 -298
  368. pymodaq/utils/plotting/data_viewers/viewer1D.py +0 -820
  369. pymodaq/utils/plotting/data_viewers/viewer1Dbasic.py +0 -231
  370. pymodaq/utils/plotting/data_viewers/viewer2D.py +0 -1118
  371. pymodaq/utils/plotting/data_viewers/viewer2D_basic.py +0 -146
  372. pymodaq/utils/plotting/data_viewers/viewerND.py +0 -800
  373. pymodaq/utils/plotting/gant_chart.py +0 -123
  374. pymodaq/utils/plotting/image_viewer.py +0 -97
  375. pymodaq/utils/plotting/items/__init__.py +0 -0
  376. pymodaq/utils/plotting/items/axis_scaled.py +0 -93
  377. pymodaq/utils/plotting/items/crosshair.py +0 -94
  378. pymodaq/utils/plotting/items/image.py +0 -388
  379. pymodaq/utils/plotting/navigator.py +0 -353
  380. pymodaq/utils/plotting/plotter/plotter.py +0 -94
  381. pymodaq/utils/plotting/plotter/plotters/__init__.py +0 -0
  382. pymodaq/utils/plotting/plotter/plotters/matplotlib_plotters.py +0 -134
  383. pymodaq/utils/plotting/plotter/plotters/qt_plotters.py +0 -78
  384. pymodaq/utils/plotting/utils/__init__.py +0 -0
  385. pymodaq/utils/plotting/utils/axes_viewer.py +0 -88
  386. pymodaq/utils/plotting/utils/filter.py +0 -585
  387. pymodaq/utils/plotting/utils/lineout.py +0 -226
  388. pymodaq/utils/plotting/utils/plot_utils.py +0 -579
  389. pymodaq/utils/plotting/utils/signalND.py +0 -1347
  390. pymodaq/utils/plotting/widgets.py +0 -76
  391. pymodaq/utils/qvariant.py +0 -12
  392. pymodaq/utils/slicing.py +0 -63
  393. pymodaq/utils/units.py +0 -216
  394. pymodaq-4.2.3.dist-info/RECORD +0 -438
  395. /pymodaq/{post_treatment/daq_analysis → extensions/daq_logger}/__init__.py +0 -0
  396. /pymodaq/{utils/abstract/logger.py → extensions/daq_logger/abstract.py} +0 -0
  397. /pymodaq/{resources/QtDesigner_Ressources → extensions/daq_logger/db}/__init__.py +0 -0
  398. {pymodaq-4.2.3.dist-info → pymodaq-5.0.0.dist-info}/entry_points.txt +0 -0
  399. {pymodaq-4.2.3.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