pymodaq 4.4.7__py3-none-any.whl → 5.0.1__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 (415) hide show
  1. pymodaq/__init__.py +57 -91
  2. pymodaq/control_modules/daq_move.py +64 -46
  3. pymodaq/control_modules/daq_move_ui.py +34 -12
  4. pymodaq/control_modules/daq_viewer.py +55 -30
  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 +51 -43
  8. pymodaq/control_modules/utils.py +43 -20
  9. pymodaq/control_modules/viewer_utility_classes.py +54 -18
  10. pymodaq/daq_utils/daq_utils.py +6 -0
  11. pymodaq/dashboard.py +639 -323
  12. pymodaq/examples/function_plotter.py +13 -12
  13. pymodaq/examples/tcp_client.py +1 -1
  14. pymodaq/extensions/__init__.py +1 -1
  15. pymodaq/extensions/bayesian/bayesian_optimisation.py +44 -32
  16. pymodaq/extensions/bayesian/utils.py +10 -10
  17. pymodaq/extensions/console.py +7 -6
  18. pymodaq/extensions/daq_logger/__init__.py +1 -0
  19. pymodaq/extensions/{daq_logger.py → daq_logger/daq_logger.py} +30 -30
  20. pymodaq/{utils/db/db_logger → extensions/daq_logger/db}/db_logger.py +16 -15
  21. pymodaq/{utils/db/db_logger → extensions/daq_logger/db}/db_logger_models.py +2 -0
  22. pymodaq/{utils/h5modules → extensions/daq_logger}/h5logging.py +7 -8
  23. pymodaq/extensions/daq_scan.py +42 -34
  24. pymodaq/extensions/daq_scan_ui.py +18 -18
  25. pymodaq/extensions/h5browser.py +2 -3
  26. pymodaq/extensions/pid/__init__.py +4 -2
  27. pymodaq/extensions/pid/daq_move_PID.py +3 -3
  28. pymodaq/extensions/pid/pid_controller.py +59 -50
  29. pymodaq/extensions/pid/utils.py +10 -5
  30. pymodaq/extensions/utils.py +33 -3
  31. pymodaq/post_treatment/load_and_plot.py +10 -7
  32. pymodaq/resources/preset_default.xml +1 -1
  33. pymodaq/updater.py +107 -0
  34. pymodaq/utils/array_manipulation.py +4 -384
  35. pymodaq/utils/calibration_camera.py +12 -9
  36. pymodaq/utils/chrono_timer.py +11 -10
  37. pymodaq/utils/config.py +3 -458
  38. pymodaq/utils/daq_utils.py +9 -715
  39. pymodaq/utils/data.py +17 -2959
  40. pymodaq/utils/enums.py +4 -74
  41. pymodaq/utils/exceptions.py +0 -4
  42. pymodaq/utils/gui_utils/__init__.py +8 -8
  43. pymodaq/utils/gui_utils/loader_utils.py +26 -1
  44. pymodaq/utils/gui_utils/utils.py +8 -162
  45. pymodaq/utils/gui_utils/widgets/lcd.py +6 -109
  46. pymodaq/utils/h5modules/__init__.py +0 -4
  47. pymodaq/utils/h5modules/module_saving.py +9 -8
  48. pymodaq/utils/leco/__init__.py +2 -2
  49. pymodaq/utils/leco/daq_move_LECODirector.py +3 -6
  50. pymodaq/utils/leco/daq_xDviewer_LECODirector.py +5 -5
  51. pymodaq/utils/leco/director_utils.py +2 -2
  52. pymodaq/utils/leco/leco_director.py +3 -3
  53. pymodaq/utils/leco/pymodaq_listener.py +4 -3
  54. pymodaq/utils/leco/utils.py +11 -9
  55. pymodaq/utils/logger.py +4 -76
  56. pymodaq/utils/managers/batchscan_manager.py +16 -19
  57. pymodaq/utils/managers/modules_manager.py +30 -17
  58. pymodaq/utils/managers/overshoot_manager.py +48 -6
  59. pymodaq/utils/managers/preset_manager.py +39 -59
  60. pymodaq/utils/managers/preset_manager_utils.py +28 -22
  61. pymodaq/utils/managers/remote_manager.py +12 -10
  62. pymodaq/utils/math_utils.py +4 -582
  63. pymodaq/utils/messenger.py +4 -64
  64. pymodaq/utils/parameter/__init__.py +6 -9
  65. pymodaq/utils/parameter/utils.py +4 -328
  66. pymodaq/utils/scanner/scan_config.py +1 -1
  67. pymodaq/utils/scanner/scan_factory.py +16 -12
  68. pymodaq/utils/{plotting → scanner}/scan_selector.py +19 -20
  69. pymodaq/utils/scanner/scanner.py +10 -8
  70. pymodaq/utils/scanner/scanners/_1d_scanners.py +8 -5
  71. pymodaq/utils/scanner/scanners/_2d_scanners.py +5 -5
  72. pymodaq/utils/scanner/scanners/sequential.py +8 -8
  73. pymodaq/utils/scanner/scanners/tabular.py +9 -9
  74. pymodaq/utils/scanner/utils.py +6 -4
  75. pymodaq/utils/svg/svg_viewer2D.py +3 -4
  76. pymodaq/utils/tcp_ip/mysocket.py +4 -110
  77. pymodaq/utils/tcp_ip/serializer.py +4 -801
  78. pymodaq/utils/tcp_ip/tcp_server_client.py +15 -13
  79. pymodaq-5.0.1.dist-info/METADATA +242 -0
  80. pymodaq-5.0.1.dist-info/RECORD +122 -0
  81. {pymodaq-4.4.7.dist-info → pymodaq-5.0.1.dist-info}/WHEEL +1 -1
  82. {pymodaq-4.4.7.dist-info → pymodaq-5.0.1.dist-info}/entry_points.txt +1 -0
  83. pymodaq/examples/custom_app.py +0 -258
  84. pymodaq/examples/custom_viewer.py +0 -112
  85. pymodaq/examples/parameter_ex.py +0 -138
  86. pymodaq/examples/preset_MockCamera.xml +0 -1
  87. pymodaq/post_treatment/daq_measurement/daq_measurement_GUI.py +0 -142
  88. pymodaq/post_treatment/daq_measurement/daq_measurement_GUI.ui +0 -232
  89. pymodaq/post_treatment/daq_measurement/daq_measurement_main.py +0 -391
  90. pymodaq/post_treatment/daq_measurement/process_from_QtDesigner_DAQ_Measurement_GUI.bat +0 -2
  91. pymodaq/post_treatment/process_to_scalar.py +0 -263
  92. pymodaq/resources/QtDesigner_Ressources/Icon_Library/1d.png +0 -0
  93. pymodaq/resources/QtDesigner_Ressources/Icon_Library/2d.png +0 -0
  94. pymodaq/resources/QtDesigner_Ressources/Icon_Library/3d.png +0 -0
  95. pymodaq/resources/QtDesigner_Ressources/Icon_Library/Add2.png +0 -0
  96. pymodaq/resources/QtDesigner_Ressources/Icon_Library/Add_Step.png +0 -0
  97. pymodaq/resources/QtDesigner_Ressources/Icon_Library/Approve.png +0 -0
  98. pymodaq/resources/QtDesigner_Ressources/Icon_Library/Approve_All.png +0 -0
  99. pymodaq/resources/QtDesigner_Ressources/Icon_Library/Browse_Dir_Path.png +0 -0
  100. pymodaq/resources/QtDesigner_Ressources/Icon_Library/Calculator.png +0 -0
  101. pymodaq/resources/QtDesigner_Ressources/Icon_Library/ChnGroup.png +0 -0
  102. pymodaq/resources/QtDesigner_Ressources/Icon_Library/ChnNum.png +0 -0
  103. pymodaq/resources/QtDesigner_Ressources/Icon_Library/ChnText.png +0 -0
  104. pymodaq/resources/QtDesigner_Ressources/Icon_Library/ChnTime.png +0 -0
  105. pymodaq/resources/QtDesigner_Ressources/Icon_Library/ChnWave.png +0 -0
  106. pymodaq/resources/QtDesigner_Ressources/Icon_Library/Close3.png +0 -0
  107. pymodaq/resources/QtDesigner_Ressources/Icon_Library/CollapseAll.png +0 -0
  108. pymodaq/resources/QtDesigner_Ressources/Icon_Library/CollapseAll_32.png +0 -0
  109. pymodaq/resources/QtDesigner_Ressources/Icon_Library/ColorPicker.png +0 -0
  110. pymodaq/resources/QtDesigner_Ressources/Icon_Library/Contract.png +0 -0
  111. pymodaq/resources/QtDesigner_Ressources/Icon_Library/Create.png +0 -0
  112. pymodaq/resources/QtDesigner_Ressources/Icon_Library/DeleteLayer.png +0 -0
  113. pymodaq/resources/QtDesigner_Ressources/Icon_Library/EditOpen.png +0 -0
  114. pymodaq/resources/QtDesigner_Ressources/Icon_Library/EditRedo.png +0 -0
  115. pymodaq/resources/QtDesigner_Ressources/Icon_Library/EditUndo.png +0 -0
  116. pymodaq/resources/QtDesigner_Ressources/Icon_Library/Ellipse.png +0 -0
  117. pymodaq/resources/QtDesigner_Ressources/Icon_Library/EllipseFilled.png +0 -0
  118. pymodaq/resources/QtDesigner_Ressources/Icon_Library/Error.png +0 -0
  119. pymodaq/resources/QtDesigner_Ressources/Icon_Library/ErrorMessage.png +0 -0
  120. pymodaq/resources/QtDesigner_Ressources/Icon_Library/Error_16.png +0 -0
  121. pymodaq/resources/QtDesigner_Ressources/Icon_Library/Exit.png +0 -0
  122. pymodaq/resources/QtDesigner_Ressources/Icon_Library/Expand.png +0 -0
  123. pymodaq/resources/QtDesigner_Ressources/Icon_Library/ExpandAll.png +0 -0
  124. pymodaq/resources/QtDesigner_Ressources/Icon_Library/ExpandAll_32.png +0 -0
  125. pymodaq/resources/QtDesigner_Ressources/Icon_Library/FFT.png +0 -0
  126. pymodaq/resources/QtDesigner_Ressources/Icon_Library/HLM.ico +0 -0
  127. pymodaq/resources/QtDesigner_Ressources/Icon_Library/Help.png +0 -0
  128. pymodaq/resources/QtDesigner_Ressources/Icon_Library/Help_32.png +0 -0
  129. pymodaq/resources/QtDesigner_Ressources/Icon_Library/Histogram.png +0 -0
  130. pymodaq/resources/QtDesigner_Ressources/Icon_Library/LUT_LookUpTable.png +0 -0
  131. pymodaq/resources/QtDesigner_Ressources/Icon_Library/MagnifyingGlass.png +0 -0
  132. pymodaq/resources/QtDesigner_Ressources/Icon_Library/MagnifyingGlass_24.png +0 -0
  133. pymodaq/resources/QtDesigner_Ressources/Icon_Library/Marker.png +0 -0
  134. pymodaq/resources/QtDesigner_Ressources/Icon_Library/Math.png +0 -0
  135. pymodaq/resources/QtDesigner_Ressources/Icon_Library/MeasurementStudio_32.png +0 -0
  136. pymodaq/resources/QtDesigner_Ressources/Icon_Library/Move.png +0 -0
  137. pymodaq/resources/QtDesigner_Ressources/Icon_Library/MoveDown.png +0 -0
  138. pymodaq/resources/QtDesigner_Ressources/Icon_Library/MoveUp.png +0 -0
  139. pymodaq/resources/QtDesigner_Ressources/Icon_Library/Multiply.png +0 -0
  140. pymodaq/resources/QtDesigner_Ressources/Icon_Library/NewFile.png +0 -0
  141. pymodaq/resources/QtDesigner_Ressources/Icon_Library/NewLayer.png +0 -0
  142. pymodaq/resources/QtDesigner_Ressources/Icon_Library/New_File.png +0 -0
  143. pymodaq/resources/QtDesigner_Ressources/Icon_Library/New_Folder.png +0 -0
  144. pymodaq/resources/QtDesigner_Ressources/Icon_Library/Open.png +0 -0
  145. pymodaq/resources/QtDesigner_Ressources/Icon_Library/Open_1D.png +0 -0
  146. pymodaq/resources/QtDesigner_Ressources/Icon_Library/Open_2D.png +0 -0
  147. pymodaq/resources/QtDesigner_Ressources/Icon_Library/Open_File.png +0 -0
  148. pymodaq/resources/QtDesigner_Ressources/Icon_Library/Open_File_32.png +0 -0
  149. pymodaq/resources/QtDesigner_Ressources/Icon_Library/Open_sim.png +0 -0
  150. pymodaq/resources/QtDesigner_Ressources/Icon_Library/Options.png +0 -0
  151. pymodaq/resources/QtDesigner_Ressources/Icon_Library/Oscilloscope.png +0 -0
  152. pymodaq/resources/QtDesigner_Ressources/Icon_Library/Oscilloscope_16.png +0 -0
  153. pymodaq/resources/QtDesigner_Ressources/Icon_Library/Pass.png +0 -0
  154. pymodaq/resources/QtDesigner_Ressources/Icon_Library/RGB.png +0 -0
  155. pymodaq/resources/QtDesigner_Ressources/Icon_Library/Rectangle.png +0 -0
  156. pymodaq/resources/QtDesigner_Ressources/Icon_Library/RectangleFilled.png +0 -0
  157. pymodaq/resources/QtDesigner_Ressources/Icon_Library/Redo.png +0 -0
  158. pymodaq/resources/QtDesigner_Ressources/Icon_Library/Refresh.png +0 -0
  159. pymodaq/resources/QtDesigner_Ressources/Icon_Library/Refresh2.png +0 -0
  160. pymodaq/resources/QtDesigner_Ressources/Icon_Library/Refresh_32.png +0 -0
  161. pymodaq/resources/QtDesigner_Ressources/Icon_Library/Region.png +0 -0
  162. pymodaq/resources/QtDesigner_Ressources/Icon_Library/Rendezvous.png +0 -0
  163. pymodaq/resources/QtDesigner_Ressources/Icon_Library/SELECT.png +0 -0
  164. pymodaq/resources/QtDesigner_Ressources/Icon_Library/Save.png +0 -0
  165. pymodaq/resources/QtDesigner_Ressources/Icon_Library/SaveAll.png +0 -0
  166. pymodaq/resources/QtDesigner_Ressources/Icon_Library/SaveAll_32.png +0 -0
  167. pymodaq/resources/QtDesigner_Ressources/Icon_Library/SaveAs.png +0 -0
  168. pymodaq/resources/QtDesigner_Ressources/Icon_Library/SaveAs_32.png +0 -0
  169. pymodaq/resources/QtDesigner_Ressources/Icon_Library/Save_24.png +0 -0
  170. pymodaq/resources/QtDesigner_Ressources/Icon_Library/Save_32.png +0 -0
  171. pymodaq/resources/QtDesigner_Ressources/Icon_Library/Search.png +0 -0
  172. pymodaq/resources/QtDesigner_Ressources/Icon_Library/SelectPolygon.png +0 -0
  173. pymodaq/resources/QtDesigner_Ressources/Icon_Library/Select_24.png +0 -0
  174. pymodaq/resources/QtDesigner_Ressources/Icon_Library/Settings.png +0 -0
  175. pymodaq/resources/QtDesigner_Ressources/Icon_Library/Snap&Save.png +0 -0
  176. pymodaq/resources/QtDesigner_Ressources/Icon_Library/Snapshot.png +0 -0
  177. pymodaq/resources/QtDesigner_Ressources/Icon_Library/Snapshot2.png +0 -0
  178. pymodaq/resources/QtDesigner_Ressources/Icon_Library/Snapshot2_16.png +0 -0
  179. pymodaq/resources/QtDesigner_Ressources/Icon_Library/Snapshot2_32.png +0 -0
  180. pymodaq/resources/QtDesigner_Ressources/Icon_Library/Spreadsheet.png +0 -0
  181. pymodaq/resources/QtDesigner_Ressources/Icon_Library/Statistics.png +0 -0
  182. pymodaq/resources/QtDesigner_Ressources/Icon_Library/Statistics2.png +0 -0
  183. pymodaq/resources/QtDesigner_Ressources/Icon_Library/Status.png +0 -0
  184. pymodaq/resources/QtDesigner_Ressources/Icon_Library/Subtract.png +0 -0
  185. pymodaq/resources/QtDesigner_Ressources/Icon_Library/Vision.png +0 -0
  186. pymodaq/resources/QtDesigner_Ressources/Icon_Library/Volts.png +0 -0
  187. pymodaq/resources/QtDesigner_Ressources/Icon_Library/Wait2.png +0 -0
  188. pymodaq/resources/QtDesigner_Ressources/Icon_Library/Zoom_1_1.png +0 -0
  189. pymodaq/resources/QtDesigner_Ressources/Icon_Library/Zoom_in.png +0 -0
  190. pymodaq/resources/QtDesigner_Ressources/Icon_Library/Zoom_out.png +0 -0
  191. pymodaq/resources/QtDesigner_Ressources/Icon_Library/Zoom_to_Selection.png +0 -0
  192. pymodaq/resources/QtDesigner_Ressources/Icon_Library/abort.png +0 -0
  193. pymodaq/resources/QtDesigner_Ressources/Icon_Library/advanced2.png +0 -0
  194. pymodaq/resources/QtDesigner_Ressources/Icon_Library/algo.png +0 -0
  195. pymodaq/resources/QtDesigner_Ressources/Icon_Library/autoscale.png +0 -0
  196. pymodaq/resources/QtDesigner_Ressources/Icon_Library/b_icon.png +0 -0
  197. pymodaq/resources/QtDesigner_Ressources/Icon_Library/back.png +0 -0
  198. pymodaq/resources/QtDesigner_Ressources/Icon_Library/bg_icon.png +0 -0
  199. pymodaq/resources/QtDesigner_Ressources/Icon_Library/camera.png +0 -0
  200. pymodaq/resources/QtDesigner_Ressources/Icon_Library/camera_snap.png +0 -0
  201. pymodaq/resources/QtDesigner_Ressources/Icon_Library/cartesian.png +0 -0
  202. pymodaq/resources/QtDesigner_Ressources/Icon_Library/clear2.png +0 -0
  203. pymodaq/resources/QtDesigner_Ressources/Icon_Library/clear_ROI.png +0 -0
  204. pymodaq/resources/QtDesigner_Ressources/Icon_Library/close2.png +0 -0
  205. pymodaq/resources/QtDesigner_Ressources/Icon_Library/cluster2.png +0 -0
  206. pymodaq/resources/QtDesigner_Ressources/Icon_Library/color.png +0 -0
  207. pymodaq/resources/QtDesigner_Ressources/Icon_Library/color2.png +0 -0
  208. pymodaq/resources/QtDesigner_Ressources/Icon_Library/continuous.png +0 -0
  209. pymodaq/resources/QtDesigner_Ressources/Icon_Library/data.png +0 -0
  210. pymodaq/resources/QtDesigner_Ressources/Icon_Library/delay.png +0 -0
  211. pymodaq/resources/QtDesigner_Ressources/Icon_Library/download.png +0 -0
  212. pymodaq/resources/QtDesigner_Ressources/Icon_Library/download2.png +0 -0
  213. pymodaq/resources/QtDesigner_Ressources/Icon_Library/error2.png +0 -0
  214. pymodaq/resources/QtDesigner_Ressources/Icon_Library/ethernet.png +0 -0
  215. pymodaq/resources/QtDesigner_Ressources/Icon_Library/exit2.png +0 -0
  216. pymodaq/resources/QtDesigner_Ressources/Icon_Library/fan.png +0 -0
  217. pymodaq/resources/QtDesigner_Ressources/Icon_Library/filter2.png +0 -0
  218. pymodaq/resources/QtDesigner_Ressources/Icon_Library/g_icon.png +0 -0
  219. pymodaq/resources/QtDesigner_Ressources/Icon_Library/gear2.png +0 -0
  220. pymodaq/resources/QtDesigner_Ressources/Icon_Library/go_to.png +0 -0
  221. pymodaq/resources/QtDesigner_Ressources/Icon_Library/go_to_1.png +0 -0
  222. pymodaq/resources/QtDesigner_Ressources/Icon_Library/go_to_2.png +0 -0
  223. pymodaq/resources/QtDesigner_Ressources/Icon_Library/grab.png +0 -0
  224. pymodaq/resources/QtDesigner_Ressources/Icon_Library/graph.png +0 -0
  225. pymodaq/resources/QtDesigner_Ressources/Icon_Library/greenLight2.png +0 -0
  226. pymodaq/resources/QtDesigner_Ressources/Icon_Library/greenLight2_32.png +0 -0
  227. pymodaq/resources/QtDesigner_Ressources/Icon_Library/green_light.png +0 -0
  228. pymodaq/resources/QtDesigner_Ressources/Icon_Library/grey_icon.png +0 -0
  229. pymodaq/resources/QtDesigner_Ressources/Icon_Library/greyscale.png +0 -0
  230. pymodaq/resources/QtDesigner_Ressources/Icon_Library/help1.png +0 -0
  231. pymodaq/resources/QtDesigner_Ressources/Icon_Library/help1_32.png +0 -0
  232. pymodaq/resources/QtDesigner_Ressources/Icon_Library/home2.png +0 -0
  233. pymodaq/resources/QtDesigner_Ressources/Icon_Library/information2.png +0 -0
  234. pymodaq/resources/QtDesigner_Ressources/Icon_Library/ini.png +0 -0
  235. pymodaq/resources/QtDesigner_Ressources/Icon_Library/input.png +0 -0
  236. pymodaq/resources/QtDesigner_Ressources/Icon_Library/integrator.png +0 -0
  237. pymodaq/resources/QtDesigner_Ressources/Icon_Library/joystick.png +0 -0
  238. pymodaq/resources/QtDesigner_Ressources/Icon_Library/light_green.png +0 -0
  239. pymodaq/resources/QtDesigner_Ressources/Icon_Library/light_green_16.png +0 -0
  240. pymodaq/resources/QtDesigner_Ressources/Icon_Library/light_red.png +0 -0
  241. pymodaq/resources/QtDesigner_Ressources/Icon_Library/light_red_16.png +0 -0
  242. pymodaq/resources/QtDesigner_Ressources/Icon_Library/light_yellow.png +0 -0
  243. pymodaq/resources/QtDesigner_Ressources/Icon_Library/light_yellow_16.png +0 -0
  244. pymodaq/resources/QtDesigner_Ressources/Icon_Library/limiter.png +0 -0
  245. pymodaq/resources/QtDesigner_Ressources/Icon_Library/load_ROI.png +0 -0
  246. pymodaq/resources/QtDesigner_Ressources/Icon_Library/meshPlot.png +0 -0
  247. pymodaq/resources/QtDesigner_Ressources/Icon_Library/meter.png +0 -0
  248. pymodaq/resources/QtDesigner_Ressources/Icon_Library/meter2.png +0 -0
  249. pymodaq/resources/QtDesigner_Ressources/Icon_Library/meter_32.png +0 -0
  250. pymodaq/resources/QtDesigner_Ressources/Icon_Library/move_contour.png +0 -0
  251. pymodaq/resources/QtDesigner_Ressources/Icon_Library/move_straight_line.png +0 -0
  252. pymodaq/resources/QtDesigner_Ressources/Icon_Library/movie.png +0 -0
  253. pymodaq/resources/QtDesigner_Ressources/Icon_Library/multi_point.png +0 -0
  254. pymodaq/resources/QtDesigner_Ressources/Icon_Library/multiplexer.png +0 -0
  255. pymodaq/resources/QtDesigner_Ressources/Icon_Library/new.png +0 -0
  256. pymodaq/resources/QtDesigner_Ressources/Icon_Library/openArrow.png +0 -0
  257. pymodaq/resources/QtDesigner_Ressources/Icon_Library/openTree.png +0 -0
  258. pymodaq/resources/QtDesigner_Ressources/Icon_Library/oscilloscope2.png +0 -0
  259. pymodaq/resources/QtDesigner_Ressources/Icon_Library/oscilloscope3.png +0 -0
  260. pymodaq/resources/QtDesigner_Ressources/Icon_Library/overlay.png +0 -0
  261. pymodaq/resources/QtDesigner_Ressources/Icon_Library/pass2.png +0 -0
  262. pymodaq/resources/QtDesigner_Ressources/Icon_Library/pass2_16.png +0 -0
  263. pymodaq/resources/QtDesigner_Ressources/Icon_Library/pass_32.png +0 -0
  264. pymodaq/resources/QtDesigner_Ressources/Icon_Library/pause.png +0 -0
  265. pymodaq/resources/QtDesigner_Ressources/Icon_Library/permute.png +0 -0
  266. pymodaq/resources/QtDesigner_Ressources/Icon_Library/phase.png +0 -0
  267. pymodaq/resources/QtDesigner_Ressources/Icon_Library/play.png +0 -0
  268. pymodaq/resources/QtDesigner_Ressources/Icon_Library/polar.png +0 -0
  269. pymodaq/resources/QtDesigner_Ressources/Icon_Library/pole_zero.png +0 -0
  270. pymodaq/resources/QtDesigner_Ressources/Icon_Library/powerMeter.png +0 -0
  271. pymodaq/resources/QtDesigner_Ressources/Icon_Library/powerSwitch.png +0 -0
  272. pymodaq/resources/QtDesigner_Ressources/Icon_Library/powerSwitch_16.png +0 -0
  273. pymodaq/resources/QtDesigner_Ressources/Icon_Library/print2.png +0 -0
  274. pymodaq/resources/QtDesigner_Ressources/Icon_Library/print2_32.png +0 -0
  275. pymodaq/resources/QtDesigner_Ressources/Icon_Library/properties.png +0 -0
  276. pymodaq/resources/QtDesigner_Ressources/Icon_Library/r_icon.png +0 -0
  277. pymodaq/resources/QtDesigner_Ressources/Icon_Library/radiocontrolbutton.png +0 -0
  278. pymodaq/resources/QtDesigner_Ressources/Icon_Library/random.png +0 -0
  279. pymodaq/resources/QtDesigner_Ressources/Icon_Library/read2.png +0 -0
  280. pymodaq/resources/QtDesigner_Ressources/Icon_Library/red_light.png +0 -0
  281. pymodaq/resources/QtDesigner_Ressources/Icon_Library/remove.png +0 -0
  282. pymodaq/resources/QtDesigner_Ressources/Icon_Library/reset.png +0 -0
  283. pymodaq/resources/QtDesigner_Ressources/Icon_Library/rgb_icon.png +0 -0
  284. pymodaq/resources/QtDesigner_Ressources/Icon_Library/robot.png +0 -0
  285. pymodaq/resources/QtDesigner_Ressources/Icon_Library/rotation2.png +0 -0
  286. pymodaq/resources/QtDesigner_Ressources/Icon_Library/run2.png +0 -0
  287. pymodaq/resources/QtDesigner_Ressources/Icon_Library/run_all.png +0 -0
  288. pymodaq/resources/QtDesigner_Ressources/Icon_Library/saturation.png +0 -0
  289. pymodaq/resources/QtDesigner_Ressources/Icon_Library/saveTree.png +0 -0
  290. pymodaq/resources/QtDesigner_Ressources/Icon_Library/save_ROI.png +0 -0
  291. pymodaq/resources/QtDesigner_Ressources/Icon_Library/scale_horizontally.png +0 -0
  292. pymodaq/resources/QtDesigner_Ressources/Icon_Library/scale_vertically.png +0 -0
  293. pymodaq/resources/QtDesigner_Ressources/Icon_Library/search2.png +0 -0
  294. pymodaq/resources/QtDesigner_Ressources/Icon_Library/select2.png +0 -0
  295. pymodaq/resources/QtDesigner_Ressources/Icon_Library/select_all.png +0 -0
  296. pymodaq/resources/QtDesigner_Ressources/Icon_Library/select_all2.png +0 -0
  297. pymodaq/resources/QtDesigner_Ressources/Icon_Library/select_none.png +0 -0
  298. pymodaq/resources/QtDesigner_Ressources/Icon_Library/sequence.png +0 -0
  299. pymodaq/resources/QtDesigner_Ressources/Icon_Library/sequence2.png +0 -0
  300. pymodaq/resources/QtDesigner_Ressources/Icon_Library/snap.png +0 -0
  301. pymodaq/resources/QtDesigner_Ressources/Icon_Library/sort_ascend.png +0 -0
  302. pymodaq/resources/QtDesigner_Ressources/Icon_Library/spectrumAnalyzer.png +0 -0
  303. pymodaq/resources/QtDesigner_Ressources/Icon_Library/start.png +0 -0
  304. pymodaq/resources/QtDesigner_Ressources/Icon_Library/status_cancelled.png +0 -0
  305. pymodaq/resources/QtDesigner_Ressources/Icon_Library/stop.png +0 -0
  306. pymodaq/resources/QtDesigner_Ressources/Icon_Library/stop2.png +0 -0
  307. pymodaq/resources/QtDesigner_Ressources/Icon_Library/stop3.png +0 -0
  308. pymodaq/resources/QtDesigner_Ressources/Icon_Library/stop_all.png +0 -0
  309. pymodaq/resources/QtDesigner_Ressources/Icon_Library/sum.png +0 -0
  310. pymodaq/resources/QtDesigner_Ressources/Icon_Library/surfacePlot.png +0 -0
  311. pymodaq/resources/QtDesigner_Ressources/Icon_Library/target.png +0 -0
  312. pymodaq/resources/QtDesigner_Ressources/Icon_Library/tree.png +0 -0
  313. pymodaq/resources/QtDesigner_Ressources/Icon_Library/updateTree.png +0 -0
  314. pymodaq/resources/QtDesigner_Ressources/Icon_Library/utility2.png +0 -0
  315. pymodaq/resources/QtDesigner_Ressources/Icon_Library/utility_small.png +0 -0
  316. pymodaq/resources/QtDesigner_Ressources/Icon_Library/vector.png +0 -0
  317. pymodaq/resources/QtDesigner_Ressources/Icon_Library/verify.png +0 -0
  318. pymodaq/resources/QtDesigner_Ressources/Icon_Library/video.png +0 -0
  319. pymodaq/resources/QtDesigner_Ressources/Icon_Library/wait.png +0 -0
  320. pymodaq/resources/QtDesigner_Ressources/Icon_Library/waterfallPlot.png +0 -0
  321. pymodaq/resources/QtDesigner_Ressources/Icon_Library/watershed.png +0 -0
  322. pymodaq/resources/QtDesigner_Ressources/Icon_Library/yellow_light.png +0 -0
  323. pymodaq/resources/QtDesigner_Ressources/Icon_Library/zip_file.png +0 -0
  324. pymodaq/resources/QtDesigner_Ressources/Icon_Library/zoomAuto.png +0 -0
  325. pymodaq/resources/QtDesigner_Ressources/Icon_Library/zoomReset.png +0 -0
  326. pymodaq/resources/QtDesigner_Ressources/QtDesigner_ressources.bat +0 -2
  327. pymodaq/resources/QtDesigner_Ressources/QtDesigner_ressources.qrc +0 -238
  328. pymodaq/resources/QtDesigner_Ressources/QtDesigner_ressources_rc.py +0 -127453
  329. pymodaq/resources/QtDesigner_Ressources/__init__.py +0 -0
  330. pymodaq/resources/QtDesigner_Ressources/credit.rst +0 -7
  331. pymodaq/resources/QtDesigner_Ressources/icons.svg +0 -142
  332. pymodaq/resources/VERSION +0 -2
  333. pymodaq/resources/config_template.toml +0 -96
  334. pymodaq/resources/triangulation_data.npy +0 -0
  335. pymodaq/utils/abstract/__init__.py +0 -48
  336. pymodaq/utils/db/__init__.py +0 -0
  337. pymodaq/utils/db/db_logger/__init__.py +0 -0
  338. pymodaq/utils/factory.py +0 -82
  339. pymodaq/utils/gui_utils/custom_app.py +0 -133
  340. pymodaq/utils/gui_utils/dock.py +0 -107
  341. pymodaq/utils/gui_utils/file_io.py +0 -94
  342. pymodaq/utils/gui_utils/layout.py +0 -34
  343. pymodaq/utils/gui_utils/list_picker.py +0 -38
  344. pymodaq/utils/gui_utils/widgets/__init__.py +0 -5
  345. pymodaq/utils/gui_utils/widgets/label.py +0 -24
  346. pymodaq/utils/gui_utils/widgets/push.py +0 -149
  347. pymodaq/utils/gui_utils/widgets/qled.py +0 -62
  348. pymodaq/utils/gui_utils/widgets/spinbox.py +0 -24
  349. pymodaq/utils/gui_utils/widgets/table.py +0 -263
  350. pymodaq/utils/gui_utils/widgets/tree_layout.py +0 -188
  351. pymodaq/utils/gui_utils/widgets/tree_toml.py +0 -110
  352. pymodaq/utils/h5modules/backends.py +0 -1022
  353. pymodaq/utils/h5modules/browsing.py +0 -627
  354. pymodaq/utils/h5modules/data_saving.py +0 -1107
  355. pymodaq/utils/h5modules/exporter.py +0 -119
  356. pymodaq/utils/h5modules/exporters/__init__.py +0 -0
  357. pymodaq/utils/h5modules/exporters/base.py +0 -111
  358. pymodaq/utils/h5modules/exporters/flimj.py +0 -63
  359. pymodaq/utils/h5modules/exporters/hyperspy.py +0 -143
  360. pymodaq/utils/h5modules/saving.py +0 -866
  361. pymodaq/utils/h5modules/utils.py +0 -115
  362. pymodaq/utils/managers/action_manager.py +0 -489
  363. pymodaq/utils/managers/parameter_manager.py +0 -279
  364. pymodaq/utils/managers/roi_manager.py +0 -740
  365. pymodaq/utils/parameter/ioxml.py +0 -545
  366. pymodaq/utils/parameter/pymodaq_ptypes/__init__.py +0 -38
  367. pymodaq/utils/parameter/pymodaq_ptypes/bool.py +0 -31
  368. pymodaq/utils/parameter/pymodaq_ptypes/date.py +0 -126
  369. pymodaq/utils/parameter/pymodaq_ptypes/filedir.py +0 -143
  370. pymodaq/utils/parameter/pymodaq_ptypes/itemselect.py +0 -265
  371. pymodaq/utils/parameter/pymodaq_ptypes/led.py +0 -44
  372. pymodaq/utils/parameter/pymodaq_ptypes/list.py +0 -150
  373. pymodaq/utils/parameter/pymodaq_ptypes/numeric.py +0 -18
  374. pymodaq/utils/parameter/pymodaq_ptypes/pixmap.py +0 -175
  375. pymodaq/utils/parameter/pymodaq_ptypes/slide.py +0 -166
  376. pymodaq/utils/parameter/pymodaq_ptypes/table.py +0 -135
  377. pymodaq/utils/parameter/pymodaq_ptypes/tableview.py +0 -149
  378. pymodaq/utils/parameter/pymodaq_ptypes/text.py +0 -142
  379. pymodaq/utils/plotting/__init__.py +0 -0
  380. pymodaq/utils/plotting/data_viewers/__init__.py +0 -10
  381. pymodaq/utils/plotting/data_viewers/base.py +0 -286
  382. pymodaq/utils/plotting/data_viewers/viewer.py +0 -275
  383. pymodaq/utils/plotting/data_viewers/viewer0D.py +0 -298
  384. pymodaq/utils/plotting/data_viewers/viewer1D.py +0 -826
  385. pymodaq/utils/plotting/data_viewers/viewer1Dbasic.py +0 -231
  386. pymodaq/utils/plotting/data_viewers/viewer2D.py +0 -1118
  387. pymodaq/utils/plotting/data_viewers/viewer2D_basic.py +0 -146
  388. pymodaq/utils/plotting/data_viewers/viewerND.py +0 -800
  389. pymodaq/utils/plotting/gant_chart.py +0 -123
  390. pymodaq/utils/plotting/image_viewer.py +0 -97
  391. pymodaq/utils/plotting/items/__init__.py +0 -0
  392. pymodaq/utils/plotting/items/axis_scaled.py +0 -93
  393. pymodaq/utils/plotting/items/crosshair.py +0 -94
  394. pymodaq/utils/plotting/items/image.py +0 -388
  395. pymodaq/utils/plotting/navigator.py +0 -353
  396. pymodaq/utils/plotting/plotter/plotter.py +0 -94
  397. pymodaq/utils/plotting/plotter/plotters/__init__.py +0 -0
  398. pymodaq/utils/plotting/plotter/plotters/matplotlib_plotters.py +0 -134
  399. pymodaq/utils/plotting/plotter/plotters/qt_plotters.py +0 -78
  400. pymodaq/utils/plotting/utils/__init__.py +0 -0
  401. pymodaq/utils/plotting/utils/axes_viewer.py +0 -88
  402. pymodaq/utils/plotting/utils/filter.py +0 -585
  403. pymodaq/utils/plotting/utils/lineout.py +0 -226
  404. pymodaq/utils/plotting/utils/plot_utils.py +0 -579
  405. pymodaq/utils/plotting/utils/signalND.py +0 -1347
  406. pymodaq/utils/plotting/widgets.py +0 -76
  407. pymodaq/utils/qvariant.py +0 -12
  408. pymodaq/utils/slicing.py +0 -63
  409. pymodaq/utils/units.py +0 -216
  410. pymodaq-4.4.7.dist-info/METADATA +0 -163
  411. pymodaq-4.4.7.dist-info/RECORD +0 -446
  412. /pymodaq/{post_treatment/daq_analysis → daq_utils}/__init__.py +0 -0
  413. /pymodaq/{utils/abstract/logger.py → extensions/daq_logger/abstract.py} +0 -0
  414. /pymodaq/{post_treatment/daq_measurement → extensions/daq_logger/db}/__init__.py +0 -0
  415. {pymodaq-4.4.7.dist-info → pymodaq-5.0.1.dist-info}/licenses/LICENSE +0 -0
@@ -1,94 +0,0 @@
1
- from pathlib import Path
2
-
3
- from pymodaq.utils.config import Config
4
- from qtpy import QtWidgets
5
-
6
- config = Config()
7
-
8
-
9
- def select_file_filter(start_path=config('data_saving', 'h5file', 'save_path'), save=True, ext=None, filter=None,
10
- force_save_extension=False):
11
- """Opens a selection file popup for loading or saving a file
12
-
13
- Parameters
14
- ----------
15
- start_path: str or Path
16
- The strating point in the file/folder system to open the popup from
17
- save: bool
18
- if True, ask you to enter a filename (with or without extension)
19
- ext: str
20
- the extension string, e.g. xml, h5, png ...
21
- filter: list of string
22
- list of possible extensions, mostly valid for loading
23
- force_save_extension: bool
24
- if True force the extension of the saved file to be set to ext
25
-
26
- Returns
27
- -------
28
- Path: the Path object of the file to save or load
29
- str: the selected filter
30
- """
31
- if ext is None:
32
- ext = '.h5'
33
-
34
- if filter is None:
35
- if not save:
36
- if not isinstance(ext, list):
37
- ext = [ext]
38
- filter = "Data files ("
39
- for ext_tmp in ext:
40
- filter += '*.' + ext_tmp + " "
41
- filter += ")"
42
-
43
- if start_path is not None:
44
- if not isinstance(start_path, str):
45
- start_path = str(start_path)
46
- if save:
47
- fname, selected_filter = QtWidgets.QFileDialog.getSaveFileName(None, 'Enter a file name', start_path,
48
- filter)
49
- else:
50
- fname, selected_filter = QtWidgets.QFileDialog.getOpenFileName(None, 'Select a file name', start_path, filter)
51
-
52
- if fname != '': # execute if the user didn't cancel the file selection
53
- fname = Path(fname)
54
- if save and force_save_extension:
55
- parent = fname.parent
56
- filename = fname.stem
57
- fname = parent.joinpath(filename + "." + ext) # forcing the right extension on the filename
58
- return fname, selected_filter
59
-
60
-
61
- def select_file(start_path=config('data_saving', 'h5file', 'save_path'), save=True, ext=None,
62
- filter=None,
63
- force_save_extension=False):
64
- """Opens a selection file popup for loading or saving a file
65
-
66
- Parameters
67
- ----------
68
- start_path: str or Path
69
- The strating point in the file/folder system to open the popup from
70
- save: bool
71
- if True, ask you to enter a filename (with or without extension)
72
- ext: str
73
- the extension string, e.g. xml, h5, png ...
74
- filter: string
75
- list of possible extensions, if you need several you can separate them by ;;
76
- for example: "Images (*.png *.xpm *.jpg);;Text files (*.txt);;XML files (*.xml)"
77
- force_save_extension: bool
78
- if True force the extension of the saved file to be set to ext
79
-
80
- Returns
81
- -------
82
- Path: the Path object of the file to save or load
83
- """
84
- fname, selected_filter = select_file_filter(start_path, save, ext, filter,
85
- force_save_extension)
86
- return fname # fname is a Path object
87
-
88
-
89
- if __name__ == '__main__':
90
- import sys
91
- app = QtWidgets.QApplication(sys.argv)
92
- file = select_file(save=True, filter="Images (*.png *.xpm *.jpg);;Text files (*.txt);;XML files (*.xml)")
93
- print(file)
94
- sys.exit(app.exec_())
@@ -1,34 +0,0 @@
1
- import pickle
2
-
3
- from pymodaq.utils import config as config_mod
4
- from pymodaq.utils.gui_utils.file_io import select_file
5
-
6
-
7
- def load_layout_state(dockarea, file=None):
8
- """
9
- Load and restore a dockarea layout state from the select_file obtained pathname file.
10
- """
11
- if file is None:
12
- file = select_file(start_path=config_mod.get_set_layout_path(), save=False, ext='dock')
13
- if file is not None:
14
- with open(str(file), 'rb') as f:
15
- dockstate = pickle.load(f)
16
- dockarea.restoreState(dockstate)
17
- file = file.name
18
- return file
19
-
20
-
21
- def save_layout_state(dockarea, file=None):
22
- """
23
- Save the current layout state in the select_file obtained pathname file.
24
- Once done dump the pickle.
25
- """
26
-
27
- dockstate = dockarea.saveState()
28
- if 'float' in dockstate:
29
- dockstate['float'] = []
30
- if file is None:
31
- file = select_file(start_path=config_mod.get_set_layout_path(), save=True, ext='dock')
32
- if file is not None:
33
- with open(str(file), 'wb') as f:
34
- pickle.dump(dockstate, f, pickle.HIGHEST_PROTOCOL)
@@ -1,38 +0,0 @@
1
- from qtpy.QtCore import QObject
2
- from qtpy import QtWidgets
3
-
4
-
5
- class ListPicker(QObject):
6
-
7
- def __init__(self, list_str):
8
- super(ListPicker, self).__init__()
9
- self.list = list_str
10
-
11
- def pick_dialog(self):
12
- self.dialog = QtWidgets.QDialog()
13
- self.dialog.setMinimumWidth(500)
14
- vlayout = QtWidgets.QVBoxLayout()
15
-
16
- self.list_widget = QtWidgets.QListWidget()
17
- self.list_widget.addItems(self.list)
18
-
19
- vlayout.addWidget(self.list_widget, 10)
20
- self.dialog.setLayout(vlayout)
21
-
22
- buttonBox = QtWidgets.QDialogButtonBox()
23
- buttonBox.addButton('Apply', buttonBox.AcceptRole)
24
- buttonBox.accepted.connect(self.dialog.accept)
25
- buttonBox.addButton('Cancel', buttonBox.RejectRole)
26
- buttonBox.rejected.connect(self.dialog.reject)
27
-
28
- vlayout.addWidget(buttonBox)
29
- self.dialog.setWindowTitle('Select an entry in the list')
30
-
31
- res = self.dialog.show()
32
-
33
- pass
34
- if res == self.dialog.Accepted:
35
- # save managers parameters in a xml file
36
- return [self.list_widget.currentIndex(), self.list_widget.currentItem().text()]
37
- else:
38
- return [-1, ""]
@@ -1,5 +0,0 @@
1
- from .qled import QLED
2
- from .push import PushButtonIcon, EditPush, EditPushRel
3
- from .spinbox import QSpinBox_ro, SpinBox
4
- from .table import TableView, TableModel
5
- from .label import LabelWithFont
@@ -1,24 +0,0 @@
1
- # -*- coding: utf-8 -*-
2
- """
3
- Created the 29/07/2022
4
-
5
- @author: Sebastien Weber
6
- """
7
-
8
- from qtpy import QtWidgets, QtCore, QtGui
9
-
10
-
11
- class LabelWithFont(QtWidgets.QLabel):
12
-
13
- def __init__(self, text: str = '', *args, font_name=None, font_size=None, isbold=False, isitalic=False, **kwargs):
14
- super().__init__(text, *args, **kwargs)
15
-
16
- font = QtGui.QFont()
17
- if font_name is not None:
18
- font.setFamily(font_name)
19
- if font_size is not None:
20
- font.setPointSize(font_size)
21
-
22
- font.setBold(isbold)
23
- font.setItalic(isitalic)
24
- self.setFont(font)
@@ -1,149 +0,0 @@
1
- from pathlib import Path
2
-
3
- from qtpy import QtWidgets, QtCore, QtGui
4
- from qtpy.QtWidgets import QWidget
5
- from pymodaq.utils.gui_utils.widgets.spinbox import SpinBox
6
-
7
-
8
- EDIT_PUSH_TYPES = ['abs', 'rel']
9
-
10
-
11
- class PushButtonIcon(QtWidgets.QPushButton):
12
- def __init__(self, icon_name: str, text: str, checkable=False, tip="", menu=None):
13
- super().__init__(text)
14
- self._menu = menu
15
- if icon_name != '':
16
- icon = QtGui.QIcon()
17
- if Path(icon_name).is_file():
18
- icon.addPixmap(QtGui.QPixmap(icon_name), QtGui.QIcon.Normal,
19
- QtGui.QIcon.Off)
20
- else:
21
- icon.addPixmap(QtGui.QPixmap(f":/icons/Icon_Library/{icon_name}.png"), QtGui.QIcon.Normal,
22
- QtGui.QIcon.Off)
23
- self.setIcon(icon)
24
- self.setCheckable(checkable)
25
- self.setToolTip(tip)
26
-
27
- def contextMenuEvent(self, event):
28
- if self._menu is not None:
29
- self._menu.exec(event.globalPos())
30
-
31
-
32
- class EditPushInfo:
33
- def __init__(self, type:str, value: float):
34
- if type not in EDIT_PUSH_TYPES:
35
- raise ValueError(f'Possible types are {EDIT_PUSH_TYPES}')
36
- self.type = type
37
- self.value = value
38
-
39
-
40
- class EditPush(QtWidgets.QWidget):
41
- clicked = QtCore.Signal(EditPushInfo)
42
-
43
- def __init__(self, icon_name: str, ini_value=0.1, text=''):
44
- super().__init__()
45
- self._edit_push_type = 'abs'
46
- self.setLayout(QtWidgets.QHBoxLayout())
47
- self._edit = SpinBox(value=ini_value, dec=True, step=0.1, minStep=0.001)
48
- self._edit.setMinimumHeight(20)
49
- self._edit.setMaximumWidth(60)
50
- self._edit.setMinimumWidth(60)
51
- self.layout().addWidget(self._edit)
52
- self.set_pushs(icon_name, text)
53
-
54
- def set_pushs(self, icon_name, text):
55
- self._push = PushButtonIcon(icon_name, text)
56
- self._push.setMaximumWidth(40)
57
- self._push.clicked.connect(lambda: self.emit_clicked())
58
- self.layout().addWidget(self._push)
59
-
60
- def emit_clicked(self, coeff=1):
61
- """will emit a signal containing a float value calculated from the product of the coeff and the internal
62
- spinbox value.
63
-
64
- See Also
65
- --------
66
- EditPushRel
67
- """
68
- self.clicked.emit(EditPushInfo(type=self._edit_push_type, value=coeff * self._edit.value()))
69
-
70
-
71
- class EditPushRel(EditPush):
72
-
73
- def __init__(self, icon_name: str, text='', ini_value=0.15):
74
- super().__init__(icon_name, text=text, ini_value=ini_value)
75
- self._edit_push_type = 'rel'
76
-
77
- def set_pushs(self, icon_name, text):
78
- vlayout = QtWidgets.QVBoxLayout()
79
- self.layout().addLayout(vlayout)
80
-
81
- self._push_plus = PushButtonIcon(icon_name, f'+{text}')
82
- self._push_plus.setMaximumWidth(40)
83
- self._push_minus = PushButtonIcon(icon_name, f'-{text}')
84
- self._push_minus.setMaximumWidth(40)
85
-
86
- vlayout.addWidget(self._push_plus)
87
- vlayout.addWidget(self._push_minus)
88
-
89
- self._push_plus.clicked.connect(lambda: self.emit_clicked(1))
90
- self._push_minus.clicked.connect(lambda: self.emit_clicked(-1))
91
-
92
-
93
- class ActionMenu(QtWidgets.QAction):
94
- def __init__(self, *args, menu=None, **kwargs):
95
- super().__init__(*args, **kwargs)
96
- self._menu = menu
97
-
98
- def contextMenuEvent(self, event):
99
- if self._menu is not None:
100
- self._menu.exec(event.globalPos())
101
-
102
-
103
- def main(init_qt=True):
104
- import sys
105
-
106
- if init_qt: # used for the test suite
107
- app = QtWidgets.QApplication(sys.argv)
108
-
109
- widget = QtWidgets.QWidget()
110
- widget.setLayout(QtWidgets.QVBoxLayout())
111
- toolbar = QtWidgets.QToolBar()
112
- widget.layout().addWidget(toolbar)
113
-
114
- action = QtWidgets.QAction('blabla')
115
- toolbar.addAction(action)
116
-
117
- menu1 = QtWidgets.QMenu()
118
- menu1.addAction('Add new task')
119
- menu1.addAction('Edit current row')
120
- menu1.addAction('Remove selected rows')
121
- menu1.addSeparator()
122
- menu1.addAction('Affect Responsable')
123
- menu2 = QtWidgets.QMenu()
124
- menu2.addAction('Affect volunteers')
125
- menu2.addAction('Remove volunteers')
126
- menu2.addSeparator()
127
- menu2.addAction('Show localisation')
128
-
129
- icon = QtGui.QIcon()
130
- icon.addPixmap(QtGui.QPixmap(f":/icons/Icon_Library/{'run2'}.png"), QtGui.QIcon.Normal,
131
- QtGui.QIcon.Off)
132
- action2 = ActionMenu(icon, 'grab', menu=menu1)
133
-
134
- toolbar.addAction(action2)
135
- grab_pb = PushButtonIcon('run2', text='', checkable=True, menu=menu2)
136
- grab_pb.setFlat(True)
137
- toolbar.addWidget(grab_pb)
138
-
139
- otherpb = PushButtonIcon('run2', 'grab me')
140
- widget.layout().addWidget(otherpb)
141
-
142
- widget.show()
143
- if init_qt:
144
- sys.exit(app.exec_())
145
-
146
-
147
- if __name__ == '__main__':
148
- main()
149
-
@@ -1,62 +0,0 @@
1
- import os
2
- import numpy as np
3
- from qtpy import QtCore, QtGui, QtWidgets
4
- from qtpy.QtWidgets import QLabel
5
- from qtpy.QtCore import QObject, Signal
6
- from pymodaq.utils.gui_utils.utils import clickable
7
-
8
-
9
- class QLED(QLabel):
10
- value_changed = Signal(bool)
11
-
12
- def __init__(self, parent=None, scale=1, readonly=True):
13
- QLabel.__init__(self, parent)
14
- # self.setText("")
15
- self.red_icon = QtGui.QPixmap(":/icons/Icon_Library/red_light.png")
16
- self.green_icon = QtGui.QPixmap(":/icons/Icon_Library/greenLight2.png")
17
- self.setPixmap(self.red_icon)
18
- self.state = False
19
- self.clickable = not readonly
20
- # set the possibility to click and control the state of the LED otherwise it behaves as an indicator
21
- clickable(self).connect(
22
- self.LED_Clicked)
23
- # clickable is a function importing a filter class to deal with mouse down event as a signal see GUI_utils
24
- self.setText("empty")
25
- self.setMaximumWidth(self.height())
26
- if scale != 1:
27
- self.scale(scale)
28
- self.set_as_false()
29
-
30
- def scale(self, scale):
31
- self.green_icon = self.green_icon.scaled(scale * self.green_icon.width(),
32
- scale * self.green_icon.height())
33
- self.red_icon = self.red_icon.scaled(scale * self.red_icon.width(),
34
- scale * self.red_icon.height())
35
-
36
- def get_state(self):
37
- return self.state
38
-
39
- def set_as(self, state=True):
40
-
41
- if state:
42
- self.set_as_true()
43
- else:
44
- self.set_as_false()
45
- if state != self.state:
46
- self.value_changed.emit(state)
47
-
48
- def set_as_true(self):
49
- self.state = True
50
- self.setPixmap(self.green_icon)
51
-
52
- def set_as_false(self):
53
- self.state = False
54
- self.setPixmap(self.red_icon)
55
-
56
- def LED_Clicked(self):
57
- if self.clickable:
58
- if self.state:
59
- self.set_as_false()
60
- else:
61
- self.set_as_true()
62
- self.value_changed.emit(not self.state)
@@ -1,24 +0,0 @@
1
- from qtpy import QtWidgets, QtGui
2
- from pyqtgraph.widgets.SpinBox import SpinBox
3
-
4
-
5
- class SpinBox(SpinBox):
6
- """
7
- In case I want to add pyqtgraph spinbox functionalities
8
- """
9
- def __init__(self, *args, font_size=None, min_height=20, **kwargs):
10
- super().__init__(*args, **kwargs)
11
-
12
- if font_size is not None:
13
- font = QtGui.QFont()
14
- font.setPointSize(font_size)
15
- self.setFont(font)
16
- self.setMinimumHeight(min_height)
17
-
18
-
19
- class QSpinBox_ro(SpinBox):
20
- def __init__(self, *args, readonly=True, **kwargs):
21
- super().__init__(*args, **kwargs)
22
- #self.setMaximum(100000)
23
- self.setReadOnly(readonly)
24
- self.setButtonSymbols(QtWidgets.QAbstractSpinBox.NoButtons)
@@ -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_())