PlotPy 2.6.2__tar.gz → 2.6.3__tar.gz
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.
- {plotpy-2.6.2 → plotpy-2.6.3}/CHANGELOG.md +23 -0
- {plotpy-2.6.2/PlotPy.egg-info → plotpy-2.6.3}/PKG-INFO +1 -1
- {plotpy-2.6.2 → plotpy-2.6.3/PlotPy.egg-info}/PKG-INFO +1 -1
- {plotpy-2.6.2 → plotpy-2.6.3}/plotpy/__init__.py +1 -1
- {plotpy-2.6.2 → plotpy-2.6.3}/plotpy/events.py +34 -29
- {plotpy-2.6.2 → plotpy-2.6.3}/plotpy/external/sliders/_generic_range_slider.py +18 -9
- {plotpy-2.6.2 → plotpy-2.6.3}/plotpy/external/sliders/_generic_slider.py +21 -6
- {plotpy-2.6.2 → plotpy-2.6.3}/plotpy/items/image/base.py +2 -1
- {plotpy-2.6.2 → plotpy-2.6.3}/plotpy/items/shape/polygon.py +4 -2
- {plotpy-2.6.2 → plotpy-2.6.3}/plotpy/items/shape/range.py +18 -19
- {plotpy-2.6.2 → plotpy-2.6.3}/plotpy/styles/image.py +4 -16
- {plotpy-2.6.2 → plotpy-2.6.3}/plotpy/tests/features/test_image_data_update.py +23 -12
- {plotpy-2.6.2 → plotpy-2.6.3}/plotpy/tests/items/test_transform.py +5 -7
- {plotpy-2.6.2 → plotpy-2.6.3}/plotpy/tests/unit/test_rect_zoom.py +1 -1
- {plotpy-2.6.2 → plotpy-2.6.3}/plotpy/tests/unit/utils.py +1 -0
- {plotpy-2.6.2 → plotpy-2.6.3}/plotpy/tests/widgets/test_theme.py +11 -3
- {plotpy-2.6.2 → plotpy-2.6.3}/plotpy/tools/image.py +7 -9
- {plotpy-2.6.2 → plotpy-2.6.3}/plotpy/widgets/colormap/editor.py +1 -1
- {plotpy-2.6.2 → plotpy-2.6.3}/setup.py +1 -1
- {plotpy-2.6.2 → plotpy-2.6.3}/src/histogram2d.c +127 -127
- {plotpy-2.6.2 → plotpy-2.6.3}/src/mandelbrot.c +127 -127
- {plotpy-2.6.2 → plotpy-2.6.3}/src/pcolor.cpp +0 -1
- {plotpy-2.6.2 → plotpy-2.6.3}/src/scaler.cpp +0 -1
- {plotpy-2.6.2 → plotpy-2.6.3}/LICENSE +0 -0
- {plotpy-2.6.2 → plotpy-2.6.3}/MANIFEST.in +0 -0
- {plotpy-2.6.2 → plotpy-2.6.3}/PlotPy.egg-info/SOURCES.txt +0 -0
- {plotpy-2.6.2 → plotpy-2.6.3}/PlotPy.egg-info/dependency_links.txt +0 -0
- {plotpy-2.6.2 → plotpy-2.6.3}/PlotPy.egg-info/entry_points.txt +0 -0
- {plotpy-2.6.2 → plotpy-2.6.3}/PlotPy.egg-info/requires.txt +0 -0
- {plotpy-2.6.2 → plotpy-2.6.3}/PlotPy.egg-info/top_level.txt +0 -0
- {plotpy-2.6.2 → plotpy-2.6.3}/README.md +0 -0
- {plotpy-2.6.2 → plotpy-2.6.3}/colormaps/README.md +0 -0
- {plotpy-2.6.2 → plotpy-2.6.3}/colormaps/_cm.py +0 -0
- {plotpy-2.6.2 → plotpy-2.6.3}/colormaps/colormap.py +0 -0
- {plotpy-2.6.2 → plotpy-2.6.3}/colormaps/matplotlib_cmaps.py +0 -0
- {plotpy-2.6.2 → plotpy-2.6.3}/doc/_static/favicon.ico +0 -0
- {plotpy-2.6.2 → plotpy-2.6.3}/doc/changelog.rst +0 -0
- {plotpy-2.6.2 → plotpy-2.6.3}/doc/conf.py +0 -0
- {plotpy-2.6.2 → plotpy-2.6.3}/doc/dev/build.rst +0 -0
- {plotpy-2.6.2 → plotpy-2.6.3}/doc/dev/contribute.rst +0 -0
- {plotpy-2.6.2 → plotpy-2.6.3}/doc/dev/guiqwt_to_plotpy.csv +0 -0
- {plotpy-2.6.2 → plotpy-2.6.3}/doc/dev/guiqwt_to_plotpy.rst +0 -0
- {plotpy-2.6.2 → plotpy-2.6.3}/doc/dev/index.rst +0 -0
- {plotpy-2.6.2 → plotpy-2.6.3}/doc/dev/platforms.rst +0 -0
- {plotpy-2.6.2 → plotpy-2.6.3}/doc/dev/v1_to_guidata_v3.csv +0 -0
- {plotpy-2.6.2 → plotpy-2.6.3}/doc/dev/v1_to_v2.csv +0 -0
- {plotpy-2.6.2 → plotpy-2.6.3}/doc/dev/v1_to_v2.rst +0 -0
- {plotpy-2.6.2 → plotpy-2.6.3}/doc/features/colormapmanager.rst +0 -0
- {plotpy-2.6.2 → plotpy-2.6.3}/doc/features/events.rst +0 -0
- {plotpy-2.6.2 → plotpy-2.6.3}/doc/features/fit.rst +0 -0
- {plotpy-2.6.2 → plotpy-2.6.3}/doc/features/fliprotate.rst +0 -0
- {plotpy-2.6.2 → plotpy-2.6.3}/doc/features/imagefile.rst +0 -0
- {plotpy-2.6.2 → plotpy-2.6.3}/doc/features/index.rst +0 -0
- {plotpy-2.6.2 → plotpy-2.6.3}/doc/features/io.rst +0 -0
- {plotpy-2.6.2 → plotpy-2.6.3}/doc/features/items/builder.rst +0 -0
- {plotpy-2.6.2 → plotpy-2.6.3}/doc/features/items/examples.rst +0 -0
- {plotpy-2.6.2 → plotpy-2.6.3}/doc/features/items/index.rst +0 -0
- {plotpy-2.6.2 → plotpy-2.6.3}/doc/features/items/overview.rst +0 -0
- {plotpy-2.6.2 → plotpy-2.6.3}/doc/features/items/reference.rst +0 -0
- {plotpy-2.6.2 → plotpy-2.6.3}/doc/features/mathutils/colormaps.rst +0 -0
- {plotpy-2.6.2 → plotpy-2.6.3}/doc/features/mathutils/geometry.rst +0 -0
- {plotpy-2.6.2 → plotpy-2.6.3}/doc/features/mathutils/index.rst +0 -0
- {plotpy-2.6.2 → plotpy-2.6.3}/doc/features/mathutils/scaler.rst +0 -0
- {plotpy-2.6.2 → plotpy-2.6.3}/doc/features/panels/index.rst +0 -0
- {plotpy-2.6.2 → plotpy-2.6.3}/doc/features/panels/overview.rst +0 -0
- {plotpy-2.6.2 → plotpy-2.6.3}/doc/features/panels/reference.rst +0 -0
- {plotpy-2.6.2 → plotpy-2.6.3}/doc/features/plot/examples.rst +0 -0
- {plotpy-2.6.2 → plotpy-2.6.3}/doc/features/plot/index.rst +0 -0
- {plotpy-2.6.2 → plotpy-2.6.3}/doc/features/plot/overview.rst +0 -0
- {plotpy-2.6.2 → plotpy-2.6.3}/doc/features/plot/reference.rst +0 -0
- {plotpy-2.6.2 → plotpy-2.6.3}/doc/features/pyplot.rst +0 -0
- {plotpy-2.6.2 → plotpy-2.6.3}/doc/features/resizedialog.rst +0 -0
- {plotpy-2.6.2 → plotpy-2.6.3}/doc/features/rotatecrop.rst +0 -0
- {plotpy-2.6.2 → plotpy-2.6.3}/doc/features/selectdialog.rst +0 -0
- {plotpy-2.6.2 → plotpy-2.6.3}/doc/features/signals.rst +0 -0
- {plotpy-2.6.2 → plotpy-2.6.3}/doc/features/styles/index.rst +0 -0
- {plotpy-2.6.2 → plotpy-2.6.3}/doc/features/styles/overview.rst +0 -0
- {plotpy-2.6.2 → plotpy-2.6.3}/doc/features/styles/reference.rst +0 -0
- {plotpy-2.6.2 → plotpy-2.6.3}/doc/features/tools/examples.rst +0 -0
- {plotpy-2.6.2 → plotpy-2.6.3}/doc/features/tools/index.rst +0 -0
- {plotpy-2.6.2 → plotpy-2.6.3}/doc/features/tools/overview.rst +0 -0
- {plotpy-2.6.2 → plotpy-2.6.3}/doc/features/tools/reference.rst +0 -0
- {plotpy-2.6.2 → plotpy-2.6.3}/doc/images/my_plot_manager.png +0 -0
- {plotpy-2.6.2 → plotpy-2.6.3}/doc/images/my_plot_manager.svg +0 -0
- {plotpy-2.6.2 → plotpy-2.6.3}/doc/images/panorama-vertical.png +0 -0
- {plotpy-2.6.2 → plotpy-2.6.3}/doc/images/panorama-vertical.svg +0 -0
- {plotpy-2.6.2 → plotpy-2.6.3}/doc/images/panorama.png +0 -0
- {plotpy-2.6.2 → plotpy-2.6.3}/doc/images/panorama.svg +0 -0
- {plotpy-2.6.2 → plotpy-2.6.3}/doc/images/plot_widgets.png +0 -0
- {plotpy-2.6.2 → plotpy-2.6.3}/doc/images/plot_widgets.svg +0 -0
- {plotpy-2.6.2 → plotpy-2.6.3}/doc/images/plotpy-banner.png +0 -0
- {plotpy-2.6.2 → plotpy-2.6.3}/doc/images/plotpy-vertical.png +0 -0
- {plotpy-2.6.2 → plotpy-2.6.3}/doc/images/screenshots/__init__.png +0 -0
- {plotpy-2.6.2 → plotpy-2.6.3}/doc/images/screenshots/computations.png +0 -0
- {plotpy-2.6.2 → plotpy-2.6.3}/doc/images/screenshots/contrast.png +0 -0
- {plotpy-2.6.2 → plotpy-2.6.3}/doc/images/screenshots/cross_section.png +0 -0
- {plotpy-2.6.2 → plotpy-2.6.3}/doc/images/screenshots/cross_section2.png +0 -0
- {plotpy-2.6.2 → plotpy-2.6.3}/doc/images/screenshots/dotarraydemo.png +0 -0
- {plotpy-2.6.2 → plotpy-2.6.3}/doc/images/screenshots/filtertest1.png +0 -0
- {plotpy-2.6.2 → plotpy-2.6.3}/doc/images/screenshots/filtertest2.png +0 -0
- {plotpy-2.6.2 → plotpy-2.6.3}/doc/images/screenshots/fit.png +0 -0
- {plotpy-2.6.2 → plotpy-2.6.3}/doc/images/screenshots/get_point.png +0 -0
- {plotpy-2.6.2 → plotpy-2.6.3}/doc/images/screenshots/hist2d.png +0 -0
- {plotpy-2.6.2 → plotpy-2.6.3}/doc/images/screenshots/image_plot_tools.png +0 -0
- {plotpy-2.6.2 → plotpy-2.6.3}/doc/images/screenshots/imagefilter.png +0 -0
- {plotpy-2.6.2 → plotpy-2.6.3}/doc/images/screenshots/imagesuperp.png +0 -0
- {plotpy-2.6.2 → plotpy-2.6.3}/doc/images/screenshots/imagexy.png +0 -0
- {plotpy-2.6.2 → plotpy-2.6.3}/doc/images/screenshots/manager.png +0 -0
- {plotpy-2.6.2 → plotpy-2.6.3}/doc/images/screenshots/mandelbrot.png +0 -0
- {plotpy-2.6.2 → plotpy-2.6.3}/doc/images/screenshots/pcolor.png +0 -0
- {plotpy-2.6.2 → plotpy-2.6.3}/doc/images/screenshots/plot.png +0 -0
- {plotpy-2.6.2 → plotpy-2.6.3}/doc/images/screenshots/simple_dialog.png +0 -0
- {plotpy-2.6.2 → plotpy-2.6.3}/doc/images/screenshots/simple_window.png +0 -0
- {plotpy-2.6.2 → plotpy-2.6.3}/doc/images/screenshots/transform.png +0 -0
- {plotpy-2.6.2 → plotpy-2.6.3}/doc/index.rst +0 -0
- {plotpy-2.6.2 → plotpy-2.6.3}/doc/intro/examples.rst +0 -0
- {plotpy-2.6.2 → plotpy-2.6.3}/doc/intro/index.rst +0 -0
- {plotpy-2.6.2 → plotpy-2.6.3}/doc/intro/installation.rst +0 -0
- {plotpy-2.6.2 → plotpy-2.6.3}/doc/intro/licenses.rst +0 -0
- {plotpy-2.6.2 → plotpy-2.6.3}/doc/intro/motivation.rst +0 -0
- {plotpy-2.6.2 → plotpy-2.6.3}/doc/intro/overview.rst +0 -0
- {plotpy-2.6.2 → plotpy-2.6.3}/doc/requirements.rst +0 -0
- {plotpy-2.6.2 → plotpy-2.6.3}/doc/update_requirements.py +0 -0
- {plotpy-2.6.2 → plotpy-2.6.3}/plotpy/builder/__init__.py +0 -0
- {plotpy-2.6.2 → plotpy-2.6.3}/plotpy/builder/annotation.py +0 -0
- {plotpy-2.6.2 → plotpy-2.6.3}/plotpy/builder/curvemarker.py +0 -0
- {plotpy-2.6.2 → plotpy-2.6.3}/plotpy/builder/image.py +0 -0
- {plotpy-2.6.2 → plotpy-2.6.3}/plotpy/builder/label.py +0 -0
- {plotpy-2.6.2 → plotpy-2.6.3}/plotpy/builder/plot.py +0 -0
- {plotpy-2.6.2 → plotpy-2.6.3}/plotpy/builder/shape.py +0 -0
- {plotpy-2.6.2 → plotpy-2.6.3}/plotpy/config.py +0 -0
- {plotpy-2.6.2 → plotpy-2.6.3}/plotpy/constants.py +0 -0
- {plotpy-2.6.2 → plotpy-2.6.3}/plotpy/coords.py +0 -0
- {plotpy-2.6.2 → plotpy-2.6.3}/plotpy/data/colormaps_default.json +0 -0
- {plotpy-2.6.2 → plotpy-2.6.3}/plotpy/data/icons/apply.png +0 -0
- {plotpy-2.6.2 → plotpy-2.6.3}/plotpy/data/icons/arredit.png +0 -0
- {plotpy-2.6.2 → plotpy-2.6.3}/plotpy/data/icons/arrow_down.png +0 -0
- {plotpy-2.6.2 → plotpy-2.6.3}/plotpy/data/icons/arrow_up.png +0 -0
- {plotpy-2.6.2 → plotpy-2.6.3}/plotpy/data/icons/autorefresh.png +0 -0
- {plotpy-2.6.2 → plotpy-2.6.3}/plotpy/data/icons/autoscale.png +0 -0
- {plotpy-2.6.2 → plotpy-2.6.3}/plotpy/data/icons/axes.png +0 -0
- {plotpy-2.6.2 → plotpy-2.6.3}/plotpy/data/icons/busy.png +0 -0
- {plotpy-2.6.2 → plotpy-2.6.3}/plotpy/data/icons/cell_edit.png +0 -0
- {plotpy-2.6.2 → plotpy-2.6.3}/plotpy/data/icons/center.png +0 -0
- {plotpy-2.6.2 → plotpy-2.6.3}/plotpy/data/icons/cmap_edit.png +0 -0
- {plotpy-2.6.2 → plotpy-2.6.3}/plotpy/data/icons/contrast.png +0 -0
- {plotpy-2.6.2 → plotpy-2.6.3}/plotpy/data/icons/copy.png +0 -0
- {plotpy-2.6.2 → plotpy-2.6.3}/plotpy/data/icons/copytoclipboard.png +0 -0
- {plotpy-2.6.2 → plotpy-2.6.3}/plotpy/data/icons/csapplylut.png +0 -0
- {plotpy-2.6.2 → plotpy-2.6.3}/plotpy/data/icons/csautoscale.png +0 -0
- {plotpy-2.6.2 → plotpy-2.6.3}/plotpy/data/icons/csection.png +0 -0
- {plotpy-2.6.2 → plotpy-2.6.3}/plotpy/data/icons/csection_a.png +0 -0
- {plotpy-2.6.2 → plotpy-2.6.3}/plotpy/data/icons/csection_line.png +0 -0
- {plotpy-2.6.2 → plotpy-2.6.3}/plotpy/data/icons/csection_oblique.png +0 -0
- {plotpy-2.6.2 → plotpy-2.6.3}/plotpy/data/icons/csperimage.png +0 -0
- {plotpy-2.6.2 → plotpy-2.6.3}/plotpy/data/icons/curve_downsample.png +0 -0
- {plotpy-2.6.2 → plotpy-2.6.3}/plotpy/data/icons/curvestyles/dots.png +0 -0
- {plotpy-2.6.2 → plotpy-2.6.3}/plotpy/data/icons/curvestyles/lines.png +0 -0
- {plotpy-2.6.2 → plotpy-2.6.3}/plotpy/data/icons/curvestyles/steps.png +0 -0
- {plotpy-2.6.2 → plotpy-2.6.3}/plotpy/data/icons/curvestyles/sticks.png +0 -0
- {plotpy-2.6.2 → plotpy-2.6.3}/plotpy/data/icons/curvetypes/xfy.png +0 -0
- {plotpy-2.6.2 → plotpy-2.6.3}/plotpy/data/icons/curvetypes/yfx.png +0 -0
- {plotpy-2.6.2 → plotpy-2.6.3}/plotpy/data/icons/delete.png +0 -0
- {plotpy-2.6.2 → plotpy-2.6.3}/plotpy/data/icons/edit.png +0 -0
- {plotpy-2.6.2 → plotpy-2.6.3}/plotpy/data/icons/edit_point_selection.png +0 -0
- {plotpy-2.6.2 → plotpy-2.6.3}/plotpy/data/icons/editors/edit.png +0 -0
- {plotpy-2.6.2 → plotpy-2.6.3}/plotpy/data/icons/editors/edit_add.png +0 -0
- {plotpy-2.6.2 → plotpy-2.6.3}/plotpy/data/icons/editors/editcopy.png +0 -0
- {plotpy-2.6.2 → plotpy-2.6.3}/plotpy/data/icons/editors/editdelete.png +0 -0
- {plotpy-2.6.2 → plotpy-2.6.3}/plotpy/data/icons/editors/editpaste.png +0 -0
- {plotpy-2.6.2 → plotpy-2.6.3}/plotpy/data/icons/editors/fileimport.png +0 -0
- {plotpy-2.6.2 → plotpy-2.6.3}/plotpy/data/icons/editors/filesave.png +0 -0
- {plotpy-2.6.2 → plotpy-2.6.3}/plotpy/data/icons/editors/imshow.png +0 -0
- {plotpy-2.6.2 → plotpy-2.6.3}/plotpy/data/icons/editors/insert.png +0 -0
- {plotpy-2.6.2 → plotpy-2.6.3}/plotpy/data/icons/editors/plot.png +0 -0
- {plotpy-2.6.2 → plotpy-2.6.3}/plotpy/data/icons/editors/rename.png +0 -0
- {plotpy-2.6.2 → plotpy-2.6.3}/plotpy/data/icons/eliminate_outliers.png +0 -0
- {plotpy-2.6.2 → plotpy-2.6.3}/plotpy/data/icons/eraser.png +0 -0
- {plotpy-2.6.2 → plotpy-2.6.3}/plotpy/data/icons/exit.png +0 -0
- {plotpy-2.6.2 → plotpy-2.6.3}/plotpy/data/icons/expander_down.png +0 -0
- {plotpy-2.6.2 → plotpy-2.6.3}/plotpy/data/icons/expander_right.png +0 -0
- {plotpy-2.6.2 → plotpy-2.6.3}/plotpy/data/icons/export.png +0 -0
- {plotpy-2.6.2 → plotpy-2.6.3}/plotpy/data/icons/file.png +0 -0
- {plotpy-2.6.2 → plotpy-2.6.3}/plotpy/data/icons/fileclose.png +0 -0
- {plotpy-2.6.2 → plotpy-2.6.3}/plotpy/data/icons/fileimport.png +0 -0
- {plotpy-2.6.2 → plotpy-2.6.3}/plotpy/data/icons/filenew.png +0 -0
- {plotpy-2.6.2 → plotpy-2.6.3}/plotpy/data/icons/fileopen.png +0 -0
- {plotpy-2.6.2 → plotpy-2.6.3}/plotpy/data/icons/filesave.png +0 -0
- {plotpy-2.6.2 → plotpy-2.6.3}/plotpy/data/icons/filesaveas.png +0 -0
- {plotpy-2.6.2 → plotpy-2.6.3}/plotpy/data/icons/filetypes/doc.png +0 -0
- {plotpy-2.6.2 → plotpy-2.6.3}/plotpy/data/icons/filetypes/gif.png +0 -0
- {plotpy-2.6.2 → plotpy-2.6.3}/plotpy/data/icons/filetypes/html.png +0 -0
- {plotpy-2.6.2 → plotpy-2.6.3}/plotpy/data/icons/filetypes/jpg.png +0 -0
- {plotpy-2.6.2 → plotpy-2.6.3}/plotpy/data/icons/filetypes/pdf.png +0 -0
- {plotpy-2.6.2 → plotpy-2.6.3}/plotpy/data/icons/filetypes/png.png +0 -0
- {plotpy-2.6.2 → plotpy-2.6.3}/plotpy/data/icons/filetypes/pps.png +0 -0
- {plotpy-2.6.2 → plotpy-2.6.3}/plotpy/data/icons/filetypes/ps.png +0 -0
- {plotpy-2.6.2 → plotpy-2.6.3}/plotpy/data/icons/filetypes/tar.png +0 -0
- {plotpy-2.6.2 → plotpy-2.6.3}/plotpy/data/icons/filetypes/tgz.png +0 -0
- {plotpy-2.6.2 → plotpy-2.6.3}/plotpy/data/icons/filetypes/tif.png +0 -0
- {plotpy-2.6.2 → plotpy-2.6.3}/plotpy/data/icons/filetypes/txt.png +0 -0
- {plotpy-2.6.2 → plotpy-2.6.3}/plotpy/data/icons/filetypes/xls.png +0 -0
- {plotpy-2.6.2 → plotpy-2.6.3}/plotpy/data/icons/filetypes/zip.png +0 -0
- {plotpy-2.6.2 → plotpy-2.6.3}/plotpy/data/icons/font.png +0 -0
- {plotpy-2.6.2 → plotpy-2.6.3}/plotpy/data/icons/full_range.png +0 -0
- {plotpy-2.6.2 → plotpy-2.6.3}/plotpy/data/icons/funct.png +0 -0
- {plotpy-2.6.2 → plotpy-2.6.3}/plotpy/data/icons/hcursor.png +0 -0
- {plotpy-2.6.2 → plotpy-2.6.3}/plotpy/data/icons/hflip.png +0 -0
- {plotpy-2.6.2 → plotpy-2.6.3}/plotpy/data/icons/imagestats.png +0 -0
- {plotpy-2.6.2 → plotpy-2.6.3}/plotpy/data/icons/item_list.png +0 -0
- {plotpy-2.6.2 → plotpy-2.6.3}/plotpy/data/icons/items/annotation.png +0 -0
- {plotpy-2.6.2 → plotpy-2.6.3}/plotpy/data/icons/items/curve.png +0 -0
- {plotpy-2.6.2 → plotpy-2.6.3}/plotpy/data/icons/items/errorbar.png +0 -0
- {plotpy-2.6.2 → plotpy-2.6.3}/plotpy/data/icons/items/grid.png +0 -0
- {plotpy-2.6.2 → plotpy-2.6.3}/plotpy/data/icons/items/histogram.png +0 -0
- {plotpy-2.6.2 → plotpy-2.6.3}/plotpy/data/icons/items/histogram2d.png +0 -0
- {plotpy-2.6.2 → plotpy-2.6.3}/plotpy/data/icons/items/image.png +0 -0
- {plotpy-2.6.2 → plotpy-2.6.3}/plotpy/data/icons/items/label.png +0 -0
- {plotpy-2.6.2 → plotpy-2.6.3}/plotpy/data/icons/items/legend.png +0 -0
- {plotpy-2.6.2 → plotpy-2.6.3}/plotpy/data/icons/items/polygonmap.png +0 -0
- {plotpy-2.6.2 → plotpy-2.6.3}/plotpy/data/icons/magnifier.png +0 -0
- {plotpy-2.6.2 → plotpy-2.6.3}/plotpy/data/icons/markers/cross.png +0 -0
- {plotpy-2.6.2 → plotpy-2.6.3}/plotpy/data/icons/markers/diamond.png +0 -0
- {plotpy-2.6.2 → plotpy-2.6.3}/plotpy/data/icons/markers/ellipse.png +0 -0
- {plotpy-2.6.2 → plotpy-2.6.3}/plotpy/data/icons/markers/hexagon.png +0 -0
- {plotpy-2.6.2 → plotpy-2.6.3}/plotpy/data/icons/markers/point.png +0 -0
- {plotpy-2.6.2 → plotpy-2.6.3}/plotpy/data/icons/markers/square.png +0 -0
- {plotpy-2.6.2 → plotpy-2.6.3}/plotpy/data/icons/markers/star.png +0 -0
- {plotpy-2.6.2 → plotpy-2.6.3}/plotpy/data/icons/markers/triangle_d.png +0 -0
- {plotpy-2.6.2 → plotpy-2.6.3}/plotpy/data/icons/markers/triangle_l.png +0 -0
- {plotpy-2.6.2 → plotpy-2.6.3}/plotpy/data/icons/markers/triangle_r.png +0 -0
- {plotpy-2.6.2 → plotpy-2.6.3}/plotpy/data/icons/markers/triangle_u.png +0 -0
- {plotpy-2.6.2 → plotpy-2.6.3}/plotpy/data/icons/markers/xcross.png +0 -0
- {plotpy-2.6.2 → plotpy-2.6.3}/plotpy/data/icons/markerstyles/cross_marker.png +0 -0
- {plotpy-2.6.2 → plotpy-2.6.3}/plotpy/data/icons/markerstyles/horiz_marker.png +0 -0
- {plotpy-2.6.2 → plotpy-2.6.3}/plotpy/data/icons/markerstyles/vert_marker.png +0 -0
- {plotpy-2.6.2 → plotpy-2.6.3}/plotpy/data/icons/mask/mask_circle.png +0 -0
- {plotpy-2.6.2 → plotpy-2.6.3}/plotpy/data/icons/mask/mask_circle_outside.png +0 -0
- {plotpy-2.6.2 → plotpy-2.6.3}/plotpy/data/icons/mask/mask_rectangle.png +0 -0
- {plotpy-2.6.2 → plotpy-2.6.3}/plotpy/data/icons/mask/mask_rectangle_outside.png +0 -0
- {plotpy-2.6.2 → plotpy-2.6.3}/plotpy/data/icons/mask/mask_tool.png +0 -0
- {plotpy-2.6.2 → plotpy-2.6.3}/plotpy/data/icons/max.png +0 -0
- {plotpy-2.6.2 → plotpy-2.6.3}/plotpy/data/icons/min.png +0 -0
- {plotpy-2.6.2 → plotpy-2.6.3}/plotpy/data/icons/move.png +0 -0
- {plotpy-2.6.2 → plotpy-2.6.3}/plotpy/data/icons/multipoint_selection.png +0 -0
- {plotpy-2.6.2 → plotpy-2.6.3}/plotpy/data/icons/none.png +0 -0
- {plotpy-2.6.2 → plotpy-2.6.3}/plotpy/data/icons/not_found.png +0 -0
- {plotpy-2.6.2 → plotpy-2.6.3}/plotpy/data/icons/on_curve.png +0 -0
- {plotpy-2.6.2 → plotpy-2.6.3}/plotpy/data/icons/patterns/bdiagpattern.png +0 -0
- {plotpy-2.6.2 → plotpy-2.6.3}/plotpy/data/icons/patterns/crosspattern.png +0 -0
- {plotpy-2.6.2 → plotpy-2.6.3}/plotpy/data/icons/patterns/dense1pattern.png +0 -0
- {plotpy-2.6.2 → plotpy-2.6.3}/plotpy/data/icons/patterns/dense2pattern.png +0 -0
- {plotpy-2.6.2 → plotpy-2.6.3}/plotpy/data/icons/patterns/dense3pattern.png +0 -0
- {plotpy-2.6.2 → plotpy-2.6.3}/plotpy/data/icons/patterns/dense4pattern.png +0 -0
- {plotpy-2.6.2 → plotpy-2.6.3}/plotpy/data/icons/patterns/dense5pattern.png +0 -0
- {plotpy-2.6.2 → plotpy-2.6.3}/plotpy/data/icons/patterns/dense6pattern.png +0 -0
- {plotpy-2.6.2 → plotpy-2.6.3}/plotpy/data/icons/patterns/dense7pattern.png +0 -0
- {plotpy-2.6.2 → plotpy-2.6.3}/plotpy/data/icons/patterns/diagcrosspattern.png +0 -0
- {plotpy-2.6.2 → plotpy-2.6.3}/plotpy/data/icons/patterns/fdiagpattern.png +0 -0
- {plotpy-2.6.2 → plotpy-2.6.3}/plotpy/data/icons/patterns/horpattern.png +0 -0
- {plotpy-2.6.2 → plotpy-2.6.3}/plotpy/data/icons/patterns/nobrush.png +0 -0
- {plotpy-2.6.2 → plotpy-2.6.3}/plotpy/data/icons/patterns/solidpattern.png +0 -0
- {plotpy-2.6.2 → plotpy-2.6.3}/plotpy/data/icons/patterns/verpattern.png +0 -0
- {plotpy-2.6.2 → plotpy-2.6.3}/plotpy/data/icons/plotpy-banner.svg +0 -0
- {plotpy-2.6.2 → plotpy-2.6.3}/plotpy/data/icons/plotpy-vertical.svg +0 -0
- {plotpy-2.6.2 → plotpy-2.6.3}/plotpy/data/icons/plotpy.svg +0 -0
- {plotpy-2.6.2 → plotpy-2.6.3}/plotpy/data/icons/point_selection.png +0 -0
- {plotpy-2.6.2 → plotpy-2.6.3}/plotpy/data/icons/print.png +0 -0
- {plotpy-2.6.2 → plotpy-2.6.3}/plotpy/data/icons/python.png +0 -0
- {plotpy-2.6.2 → plotpy-2.6.3}/plotpy/data/icons/quickview.png +0 -0
- {plotpy-2.6.2 → plotpy-2.6.3}/plotpy/data/icons/rectangular_select.png +0 -0
- {plotpy-2.6.2 → plotpy-2.6.3}/plotpy/data/icons/refresh.png +0 -0
- {plotpy-2.6.2 → plotpy-2.6.3}/plotpy/data/icons/save_all.png +0 -0
- {plotpy-2.6.2 → plotpy-2.6.3}/plotpy/data/icons/scales/lin_lin.png +0 -0
- {plotpy-2.6.2 → plotpy-2.6.3}/plotpy/data/icons/scales/lin_log.png +0 -0
- {plotpy-2.6.2 → plotpy-2.6.3}/plotpy/data/icons/scales/log_lin.png +0 -0
- {plotpy-2.6.2 → plotpy-2.6.3}/plotpy/data/icons/scales/log_log.png +0 -0
- {plotpy-2.6.2 → plotpy-2.6.3}/plotpy/data/icons/selection.png +0 -0
- {plotpy-2.6.2 → plotpy-2.6.3}/plotpy/data/icons/settings.png +0 -0
- {plotpy-2.6.2 → plotpy-2.6.3}/plotpy/data/icons/shape.png +0 -0
- {plotpy-2.6.2 → plotpy-2.6.3}/plotpy/data/icons/shapes/circle.png +0 -0
- {plotpy-2.6.2 → plotpy-2.6.3}/plotpy/data/icons/shapes/contour.png +0 -0
- {plotpy-2.6.2 → plotpy-2.6.3}/plotpy/data/icons/shapes/ellipse_shape.png +0 -0
- {plotpy-2.6.2 → plotpy-2.6.3}/plotpy/data/icons/shapes/freeform.png +0 -0
- {plotpy-2.6.2 → plotpy-2.6.3}/plotpy/data/icons/shapes/gtaxes.png +0 -0
- {plotpy-2.6.2 → plotpy-2.6.3}/plotpy/data/icons/shapes/marker.png +0 -0
- {plotpy-2.6.2 → plotpy-2.6.3}/plotpy/data/icons/shapes/oblique_rectangle.png +0 -0
- {plotpy-2.6.2 → plotpy-2.6.3}/plotpy/data/icons/shapes/point_shape.png +0 -0
- {plotpy-2.6.2 → plotpy-2.6.3}/plotpy/data/icons/shapes/polyline.png +0 -0
- {plotpy-2.6.2 → plotpy-2.6.3}/plotpy/data/icons/shapes/rectangle.png +0 -0
- {plotpy-2.6.2 → plotpy-2.6.3}/plotpy/data/icons/shapes/segment.png +0 -0
- {plotpy-2.6.2 → plotpy-2.6.3}/plotpy/data/icons/snapshot.png +0 -0
- {plotpy-2.6.2 → plotpy-2.6.3}/plotpy/data/icons/styles/dash.png +0 -0
- {plotpy-2.6.2 → plotpy-2.6.3}/plotpy/data/icons/styles/dashdot.png +0 -0
- {plotpy-2.6.2 → plotpy-2.6.3}/plotpy/data/icons/styles/dashdotdot.png +0 -0
- {plotpy-2.6.2 → plotpy-2.6.3}/plotpy/data/icons/styles/dot.png +0 -0
- {plotpy-2.6.2 → plotpy-2.6.3}/plotpy/data/icons/styles/solid.png +0 -0
- {plotpy-2.6.2 → plotpy-2.6.3}/plotpy/data/icons/trash.png +0 -0
- {plotpy-2.6.2 → plotpy-2.6.3}/plotpy/data/icons/trimage_lock.png +0 -0
- {plotpy-2.6.2 → plotpy-2.6.3}/plotpy/data/icons/trimage_unlock.png +0 -0
- {plotpy-2.6.2 → plotpy-2.6.3}/plotpy/data/icons/vcursor.png +0 -0
- {plotpy-2.6.2 → plotpy-2.6.3}/plotpy/data/icons/vflip.png +0 -0
- {plotpy-2.6.2 → plotpy-2.6.3}/plotpy/data/icons/xcursor.png +0 -0
- {plotpy-2.6.2 → plotpy-2.6.3}/plotpy/data/icons/xmax.png +0 -0
- {plotpy-2.6.2 → plotpy-2.6.3}/plotpy/data/icons/xmin.png +0 -0
- {plotpy-2.6.2 → plotpy-2.6.3}/plotpy/data/icons/xrange.png +0 -0
- {plotpy-2.6.2 → plotpy-2.6.3}/plotpy/data/icons/zlog.svg +0 -0
- {plotpy-2.6.2 → plotpy-2.6.3}/plotpy/external/__init__.py +0 -0
- {plotpy-2.6.2 → plotpy-2.6.3}/plotpy/external/sliders/__init__.py +0 -0
- {plotpy-2.6.2 → plotpy-2.6.3}/plotpy/external/sliders/_labeled.py +0 -0
- {plotpy-2.6.2 → plotpy-2.6.3}/plotpy/external/sliders/_misc.py +0 -0
- {plotpy-2.6.2 → plotpy-2.6.3}/plotpy/external/sliders/_range_style.py +0 -0
- {plotpy-2.6.2 → plotpy-2.6.3}/plotpy/external/sliders/_sliders.py +0 -0
- {plotpy-2.6.2 → plotpy-2.6.3}/plotpy/interfaces/__init__.py +0 -0
- {plotpy-2.6.2 → plotpy-2.6.3}/plotpy/interfaces/items.py +0 -0
- {plotpy-2.6.2 → plotpy-2.6.3}/plotpy/interfaces/panel.py +0 -0
- {plotpy-2.6.2 → plotpy-2.6.3}/plotpy/interfaces/plotmanager.py +0 -0
- {plotpy-2.6.2 → plotpy-2.6.3}/plotpy/io.py +0 -0
- {plotpy-2.6.2 → plotpy-2.6.3}/plotpy/items/__init__.py +0 -0
- {plotpy-2.6.2 → plotpy-2.6.3}/plotpy/items/annotation.py +0 -0
- {plotpy-2.6.2 → plotpy-2.6.3}/plotpy/items/contour.py +0 -0
- {plotpy-2.6.2 → plotpy-2.6.3}/plotpy/items/curve/__init__.py +0 -0
- {plotpy-2.6.2 → plotpy-2.6.3}/plotpy/items/curve/base.py +0 -0
- {plotpy-2.6.2 → plotpy-2.6.3}/plotpy/items/curve/errorbar.py +0 -0
- {plotpy-2.6.2 → plotpy-2.6.3}/plotpy/items/grid.py +0 -0
- {plotpy-2.6.2 → plotpy-2.6.3}/plotpy/items/histogram.py +0 -0
- {plotpy-2.6.2 → plotpy-2.6.3}/plotpy/items/image/__init__.py +0 -0
- {plotpy-2.6.2 → plotpy-2.6.3}/plotpy/items/image/filter.py +0 -0
- {plotpy-2.6.2 → plotpy-2.6.3}/plotpy/items/image/image_items.py +0 -0
- {plotpy-2.6.2 → plotpy-2.6.3}/plotpy/items/image/masked.py +0 -0
- {plotpy-2.6.2 → plotpy-2.6.3}/plotpy/items/image/misc.py +0 -0
- {plotpy-2.6.2 → plotpy-2.6.3}/plotpy/items/image/transform.py +0 -0
- {plotpy-2.6.2 → plotpy-2.6.3}/plotpy/items/label.py +0 -0
- {plotpy-2.6.2 → plotpy-2.6.3}/plotpy/items/polygonmap.py +0 -0
- {plotpy-2.6.2 → plotpy-2.6.3}/plotpy/items/shape/__init__.py +0 -0
- {plotpy-2.6.2 → plotpy-2.6.3}/plotpy/items/shape/axis.py +0 -0
- {plotpy-2.6.2 → plotpy-2.6.3}/plotpy/items/shape/base.py +0 -0
- {plotpy-2.6.2 → plotpy-2.6.3}/plotpy/items/shape/ellipse.py +0 -0
- {plotpy-2.6.2 → plotpy-2.6.3}/plotpy/items/shape/marker.py +0 -0
- {plotpy-2.6.2 → plotpy-2.6.3}/plotpy/items/shape/point.py +0 -0
- {plotpy-2.6.2 → plotpy-2.6.3}/plotpy/items/shape/rectangle.py +0 -0
- {plotpy-2.6.2 → plotpy-2.6.3}/plotpy/items/shape/segment.py +0 -0
- {plotpy-2.6.2 → plotpy-2.6.3}/plotpy/items/shape/svg.py +0 -0
- {plotpy-2.6.2 → plotpy-2.6.3}/plotpy/locale/fr/LC_MESSAGES/plotpy.mo +0 -0
- {plotpy-2.6.2 → plotpy-2.6.3}/plotpy/lutrange.py +0 -0
- {plotpy-2.6.2 → plotpy-2.6.3}/plotpy/mathutils/__init__.py +0 -0
- {plotpy-2.6.2 → plotpy-2.6.3}/plotpy/mathutils/arrayfuncs.py +0 -0
- {plotpy-2.6.2 → plotpy-2.6.3}/plotpy/mathutils/colormap.py +0 -0
- {plotpy-2.6.2 → plotpy-2.6.3}/plotpy/mathutils/geometry.py +0 -0
- {plotpy-2.6.2 → plotpy-2.6.3}/plotpy/mathutils/scaler.py +0 -0
- {plotpy-2.6.2 → plotpy-2.6.3}/plotpy/panels/__init__.py +0 -0
- {plotpy-2.6.2 → plotpy-2.6.3}/plotpy/panels/base.py +0 -0
- {plotpy-2.6.2 → plotpy-2.6.3}/plotpy/panels/contrastadjustment.py +0 -0
- {plotpy-2.6.2 → plotpy-2.6.3}/plotpy/panels/csection/__init__.py +0 -0
- {plotpy-2.6.2 → plotpy-2.6.3}/plotpy/panels/csection/csitem.py +0 -0
- {plotpy-2.6.2 → plotpy-2.6.3}/plotpy/panels/csection/csplot.py +0 -0
- {plotpy-2.6.2 → plotpy-2.6.3}/plotpy/panels/csection/cswidget.py +0 -0
- {plotpy-2.6.2 → plotpy-2.6.3}/plotpy/panels/itemlist.py +0 -0
- {plotpy-2.6.2 → plotpy-2.6.3}/plotpy/plot/__init__.py +0 -0
- {plotpy-2.6.2 → plotpy-2.6.3}/plotpy/plot/base.py +0 -0
- {plotpy-2.6.2 → plotpy-2.6.3}/plotpy/plot/interactive.py +0 -0
- {plotpy-2.6.2 → plotpy-2.6.3}/plotpy/plot/manager.py +0 -0
- {plotpy-2.6.2 → plotpy-2.6.3}/plotpy/plot/plotwidget.py +0 -0
- {plotpy-2.6.2 → plotpy-2.6.3}/plotpy/pyplot.py +0 -0
- {plotpy-2.6.2 → plotpy-2.6.3}/plotpy/styles/__init__.py +0 -0
- {plotpy-2.6.2 → plotpy-2.6.3}/plotpy/styles/axes.py +0 -0
- {plotpy-2.6.2 → plotpy-2.6.3}/plotpy/styles/base.py +0 -0
- {plotpy-2.6.2 → plotpy-2.6.3}/plotpy/styles/curve.py +0 -0
- {plotpy-2.6.2 → plotpy-2.6.3}/plotpy/styles/errorbar.py +0 -0
- {plotpy-2.6.2 → plotpy-2.6.3}/plotpy/styles/histogram.py +0 -0
- {plotpy-2.6.2 → plotpy-2.6.3}/plotpy/styles/label.py +0 -0
- {plotpy-2.6.2 → plotpy-2.6.3}/plotpy/styles/polygonmap.py +0 -0
- {plotpy-2.6.2 → plotpy-2.6.3}/plotpy/styles/shape.py +0 -0
- {plotpy-2.6.2 → plotpy-2.6.3}/plotpy/tests/__init__.py +0 -0
- {plotpy-2.6.2 → plotpy-2.6.3}/plotpy/tests/benchmarks/__init__.py +0 -0
- {plotpy-2.6.2 → plotpy-2.6.3}/plotpy/tests/benchmarks/test_benchmarks.py +0 -0
- {plotpy-2.6.2 → plotpy-2.6.3}/plotpy/tests/benchmarks/test_bigimages.py +0 -0
- {plotpy-2.6.2 → plotpy-2.6.3}/plotpy/tests/benchmarks/test_loadtest.py +0 -0
- {plotpy-2.6.2 → plotpy-2.6.3}/plotpy/tests/conftest.py +0 -0
- {plotpy-2.6.2 → plotpy-2.6.3}/plotpy/tests/data/brain.png +0 -0
- {plotpy-2.6.2 → plotpy-2.6.3}/plotpy/tests/data/brain_cylinder.png +0 -0
- {plotpy-2.6.2 → plotpy-2.6.3}/plotpy/tests/data/mr-brain.dcm +0 -0
- {plotpy-2.6.2 → plotpy-2.6.3}/plotpy/tests/data/svg_target.svg +0 -0
- {plotpy-2.6.2 → plotpy-2.6.3}/plotpy/tests/data/svg_tool.svg +0 -0
- {plotpy-2.6.2 → plotpy-2.6.3}/plotpy/tests/data.py +0 -0
- {plotpy-2.6.2 → plotpy-2.6.3}/plotpy/tests/features/__init__.py +0 -0
- {plotpy-2.6.2 → plotpy-2.6.3}/plotpy/tests/features/test_auto_curve_image.py +0 -0
- {plotpy-2.6.2 → plotpy-2.6.3}/plotpy/tests/features/test_autoscale_shapes.py +0 -0
- {plotpy-2.6.2 → plotpy-2.6.3}/plotpy/tests/features/test_builder.py +0 -0
- {plotpy-2.6.2 → plotpy-2.6.3}/plotpy/tests/features/test_colormap_editor.py +0 -0
- {plotpy-2.6.2 → plotpy-2.6.3}/plotpy/tests/features/test_colormap_manager.py +0 -0
- {plotpy-2.6.2 → plotpy-2.6.3}/plotpy/tests/features/test_computations.py +0 -0
- {plotpy-2.6.2 → plotpy-2.6.3}/plotpy/tests/features/test_contrast.py +0 -0
- {plotpy-2.6.2 → plotpy-2.6.3}/plotpy/tests/features/test_cursors.py +0 -0
- {plotpy-2.6.2 → plotpy-2.6.3}/plotpy/tests/features/test_dicom_image.py +0 -0
- {plotpy-2.6.2 → plotpy-2.6.3}/plotpy/tests/features/test_fit.py +0 -0
- {plotpy-2.6.2 → plotpy-2.6.3}/plotpy/tests/features/test_image_coords.py +0 -0
- {plotpy-2.6.2 → plotpy-2.6.3}/plotpy/tests/features/test_imagefilter.py +0 -0
- {plotpy-2.6.2 → plotpy-2.6.3}/plotpy/tests/features/test_imagesuperp.py +0 -0
- {plotpy-2.6.2 → plotpy-2.6.3}/plotpy/tests/features/test_loadsaveitems_hdf5.py +0 -0
- {plotpy-2.6.2 → plotpy-2.6.3}/plotpy/tests/features/test_loadsaveitems_json.py +0 -0
- {plotpy-2.6.2 → plotpy-2.6.3}/plotpy/tests/features/test_loadsaveitems_pickle.py +0 -0
- {plotpy-2.6.2 → plotpy-2.6.3}/plotpy/tests/features/test_manager.py +0 -0
- {plotpy-2.6.2 → plotpy-2.6.3}/plotpy/tests/features/test_no_auto_tools.py +0 -0
- {plotpy-2.6.2 → plotpy-2.6.3}/plotpy/tests/features/test_plot_log.py +0 -0
- {plotpy-2.6.2 → plotpy-2.6.3}/plotpy/tests/features/test_plot_types.py +0 -0
- {plotpy-2.6.2 → plotpy-2.6.3}/plotpy/tests/features/test_plot_yreverse.py +0 -0
- {plotpy-2.6.2 → plotpy-2.6.3}/plotpy/tests/features/test_pyplot.py +0 -0
- {plotpy-2.6.2 → plotpy-2.6.3}/plotpy/tests/features/test_resize.py +0 -0
- {plotpy-2.6.2 → plotpy-2.6.3}/plotpy/tests/items/__init__.py +0 -0
- {plotpy-2.6.2 → plotpy-2.6.3}/plotpy/tests/items/test_annotations.py +0 -0
- {plotpy-2.6.2 → plotpy-2.6.3}/plotpy/tests/items/test_curves.py +0 -0
- {plotpy-2.6.2 → plotpy-2.6.3}/plotpy/tests/items/test_curves_highdpi.py +0 -0
- {plotpy-2.6.2 → plotpy-2.6.3}/plotpy/tests/items/test_hist2d.py +0 -0
- {plotpy-2.6.2 → plotpy-2.6.3}/plotpy/tests/items/test_histogram.py +0 -0
- {plotpy-2.6.2 → plotpy-2.6.3}/plotpy/tests/items/test_image.py +0 -0
- {plotpy-2.6.2 → plotpy-2.6.3}/plotpy/tests/items/test_image_contour.py +0 -0
- {plotpy-2.6.2 → plotpy-2.6.3}/plotpy/tests/items/test_image_masked.py +0 -0
- {plotpy-2.6.2 → plotpy-2.6.3}/plotpy/tests/items/test_image_masked_xy.py +0 -0
- {plotpy-2.6.2 → plotpy-2.6.3}/plotpy/tests/items/test_image_rgb.py +0 -0
- {plotpy-2.6.2 → plotpy-2.6.3}/plotpy/tests/items/test_image_xy.py +0 -0
- {plotpy-2.6.2 → plotpy-2.6.3}/plotpy/tests/items/test_mandelbrot.py +0 -0
- {plotpy-2.6.2 → plotpy-2.6.3}/plotpy/tests/items/test_pcolor.py +0 -0
- {plotpy-2.6.2 → plotpy-2.6.3}/plotpy/tests/items/test_polygons.py +0 -0
- {plotpy-2.6.2 → plotpy-2.6.3}/plotpy/tests/items/test_svgshapes.py +0 -0
- {plotpy-2.6.2 → plotpy-2.6.3}/plotpy/tests/tools/__init__.py +0 -0
- {plotpy-2.6.2 → plotpy-2.6.3}/plotpy/tests/tools/test_actiontool.py +0 -0
- {plotpy-2.6.2 → plotpy-2.6.3}/plotpy/tests/tools/test_cross_section.py +0 -0
- {plotpy-2.6.2 → plotpy-2.6.3}/plotpy/tests/tools/test_cross_section_line.py +0 -0
- {plotpy-2.6.2 → plotpy-2.6.3}/plotpy/tests/tools/test_cross_section_oblique.py +0 -0
- {plotpy-2.6.2 → plotpy-2.6.3}/plotpy/tests/tools/test_customize_shape_tool.py +0 -0
- {plotpy-2.6.2 → plotpy-2.6.3}/plotpy/tests/tools/test_cyclic_import.py +0 -0
- {plotpy-2.6.2 → plotpy-2.6.3}/plotpy/tests/tools/test_downsample_curve.py +0 -0
- {plotpy-2.6.2 → plotpy-2.6.3}/plotpy/tests/tools/test_edit_point.py +0 -0
- {plotpy-2.6.2 → plotpy-2.6.3}/plotpy/tests/tools/test_get_point.py +0 -0
- {plotpy-2.6.2 → plotpy-2.6.3}/plotpy/tests/tools/test_get_points.py +0 -0
- {plotpy-2.6.2 → plotpy-2.6.3}/plotpy/tests/tools/test_get_rectangle.py +0 -0
- {plotpy-2.6.2 → plotpy-2.6.3}/plotpy/tests/tools/test_get_rectangle_with_svg.py +0 -0
- {plotpy-2.6.2 → plotpy-2.6.3}/plotpy/tests/tools/test_get_segment.py +0 -0
- {plotpy-2.6.2 → plotpy-2.6.3}/plotpy/tests/tools/test_image_plot_tools.py +0 -0
- {plotpy-2.6.2 → plotpy-2.6.3}/plotpy/tests/tools/test_stats_tools.py +0 -0
- {plotpy-2.6.2 → plotpy-2.6.3}/plotpy/tests/tools/test_zaxislog.py +0 -0
- {plotpy-2.6.2 → plotpy-2.6.3}/plotpy/tests/unit/__init__.py +0 -0
- {plotpy-2.6.2 → plotpy-2.6.3}/plotpy/tests/unit/test_annotation_tools.py +0 -0
- {plotpy-2.6.2 → plotpy-2.6.3}/plotpy/tests/unit/test_aspect_ratio_tool.py +0 -0
- {plotpy-2.6.2 → plotpy-2.6.3}/plotpy/tests/unit/test_baseplot.py +0 -0
- {plotpy-2.6.2 → plotpy-2.6.3}/plotpy/tests/unit/test_builder_annotation.py +0 -0
- {plotpy-2.6.2 → plotpy-2.6.3}/plotpy/tests/unit/test_builder_curve.py +0 -0
- {plotpy-2.6.2 → plotpy-2.6.3}/plotpy/tests/unit/test_builder_image.py +0 -0
- {plotpy-2.6.2 → plotpy-2.6.3}/plotpy/tests/unit/test_builder_shape.py +0 -0
- {plotpy-2.6.2 → plotpy-2.6.3}/plotpy/tests/unit/test_contour.py +0 -0
- {plotpy-2.6.2 → plotpy-2.6.3}/plotpy/tests/unit/test_cursor_tools.py +0 -0
- {plotpy-2.6.2 → plotpy-2.6.3}/plotpy/tests/unit/test_curve_tools.py +0 -0
- {plotpy-2.6.2 → plotpy-2.6.3}/plotpy/tests/unit/test_display_coords_tool.py +0 -0
- {plotpy-2.6.2 → plotpy-2.6.3}/plotpy/tests/unit/test_events.py +0 -0
- {plotpy-2.6.2 → plotpy-2.6.3}/plotpy/tests/unit/test_fontparam.py +0 -0
- {plotpy-2.6.2 → plotpy-2.6.3}/plotpy/tests/unit/test_geometry.py +0 -0
- {plotpy-2.6.2 → plotpy-2.6.3}/plotpy/tests/unit/test_io.py +0 -0
- {plotpy-2.6.2 → plotpy-2.6.3}/plotpy/tests/unit/test_line.py +0 -0
- {plotpy-2.6.2 → plotpy-2.6.3}/plotpy/tests/unit/test_line_cross_section_tool.py +0 -0
- {plotpy-2.6.2 → plotpy-2.6.3}/plotpy/tests/unit/test_manipulate_selection.py +0 -0
- {plotpy-2.6.2 → plotpy-2.6.3}/plotpy/tests/unit/test_mask_tool.py +0 -0
- {plotpy-2.6.2 → plotpy-2.6.3}/plotpy/tests/unit/test_multiline_tools.py +0 -0
- {plotpy-2.6.2 → plotpy-2.6.3}/plotpy/tests/unit/test_oblique_cross_section_tool.py +0 -0
- {plotpy-2.6.2 → plotpy-2.6.3}/plotpy/tests/unit/test_plot_curve.py +0 -0
- {plotpy-2.6.2 → plotpy-2.6.3}/plotpy/tests/unit/test_plot_image.py +0 -0
- {plotpy-2.6.2 → plotpy-2.6.3}/plotpy/tests/unit/test_seg_dist.py +0 -0
- {plotpy-2.6.2 → plotpy-2.6.3}/plotpy/tests/unit/test_styles.py +0 -0
- {plotpy-2.6.2 → plotpy-2.6.3}/plotpy/tests/unit/test_tools_export.py +0 -0
- {plotpy-2.6.2 → plotpy-2.6.3}/plotpy/tests/vistools.py +0 -0
- {plotpy-2.6.2 → plotpy-2.6.3}/plotpy/tests/widgets/__init__.py +0 -0
- {plotpy-2.6.2 → plotpy-2.6.3}/plotpy/tests/widgets/test_dotarraydemo.py +0 -0
- {plotpy-2.6.2 → plotpy-2.6.3}/plotpy/tests/widgets/test_filtertest1.py +0 -0
- {plotpy-2.6.2 → plotpy-2.6.3}/plotpy/tests/widgets/test_filtertest2.py +0 -0
- {plotpy-2.6.2 → plotpy-2.6.3}/plotpy/tests/widgets/test_fliprotate.py +0 -0
- {plotpy-2.6.2 → plotpy-2.6.3}/plotpy/tests/widgets/test_plot_timecurve.py +0 -0
- {plotpy-2.6.2 → plotpy-2.6.3}/plotpy/tests/widgets/test_qtdesigner.py +0 -0
- {plotpy-2.6.2 → plotpy-2.6.3}/plotpy/tests/widgets/test_qtdesigner.ui +0 -0
- {plotpy-2.6.2 → plotpy-2.6.3}/plotpy/tests/widgets/test_resize_dialog.py +0 -0
- {plotpy-2.6.2 → plotpy-2.6.3}/plotpy/tests/widgets/test_rotatecrop.py +0 -0
- {plotpy-2.6.2 → plotpy-2.6.3}/plotpy/tests/widgets/test_simple_dialog.py +0 -0
- {plotpy-2.6.2 → plotpy-2.6.3}/plotpy/tests/widgets/test_simple_window.py +0 -0
- {plotpy-2.6.2 → plotpy-2.6.3}/plotpy/tests/widgets/test_syncplot.py +0 -0
- {plotpy-2.6.2 → plotpy-2.6.3}/plotpy/tools/__init__.py +0 -0
- {plotpy-2.6.2 → plotpy-2.6.3}/plotpy/tools/annotation.py +0 -0
- {plotpy-2.6.2 → plotpy-2.6.3}/plotpy/tools/axes.py +0 -0
- {plotpy-2.6.2 → plotpy-2.6.3}/plotpy/tools/base.py +0 -0
- {plotpy-2.6.2 → plotpy-2.6.3}/plotpy/tools/cross_section.py +0 -0
- {plotpy-2.6.2 → plotpy-2.6.3}/plotpy/tools/cursor.py +0 -0
- {plotpy-2.6.2 → plotpy-2.6.3}/plotpy/tools/curve.py +0 -0
- {plotpy-2.6.2 → plotpy-2.6.3}/plotpy/tools/item.py +0 -0
- {plotpy-2.6.2 → plotpy-2.6.3}/plotpy/tools/label.py +0 -0
- {plotpy-2.6.2 → plotpy-2.6.3}/plotpy/tools/misc.py +0 -0
- {plotpy-2.6.2 → plotpy-2.6.3}/plotpy/tools/plot.py +0 -0
- {plotpy-2.6.2 → plotpy-2.6.3}/plotpy/tools/selection.py +0 -0
- {plotpy-2.6.2 → plotpy-2.6.3}/plotpy/tools/shape.py +0 -0
- {plotpy-2.6.2 → plotpy-2.6.3}/plotpy/widgets/__init__.py +0 -0
- {plotpy-2.6.2 → plotpy-2.6.3}/plotpy/widgets/about.py +0 -0
- {plotpy-2.6.2 → plotpy-2.6.3}/plotpy/widgets/basetransform.py +0 -0
- {plotpy-2.6.2 → plotpy-2.6.3}/plotpy/widgets/colormap/__init__.py +0 -0
- {plotpy-2.6.2 → plotpy-2.6.3}/plotpy/widgets/colormap/_slider.py +0 -0
- {plotpy-2.6.2 → plotpy-2.6.3}/plotpy/widgets/colormap/manager.py +0 -0
- {plotpy-2.6.2 → plotpy-2.6.3}/plotpy/widgets/colormap/widget.py +0 -0
- {plotpy-2.6.2 → plotpy-2.6.3}/plotpy/widgets/fit.py +0 -0
- {plotpy-2.6.2 → plotpy-2.6.3}/plotpy/widgets/fliprotate.py +0 -0
- {plotpy-2.6.2 → plotpy-2.6.3}/plotpy/widgets/imagefile.py +0 -0
- {plotpy-2.6.2 → plotpy-2.6.3}/plotpy/widgets/qtdesigner.py +0 -0
- {plotpy-2.6.2 → plotpy-2.6.3}/plotpy/widgets/resizedialog.py +0 -0
- {plotpy-2.6.2 → plotpy-2.6.3}/plotpy/widgets/rotatecrop.py +0 -0
- {plotpy-2.6.2 → plotpy-2.6.3}/plotpy/widgets/selectdialog.py +0 -0
- {plotpy-2.6.2 → plotpy-2.6.3}/plotpy-tests.desktop +0 -0
- {plotpy-2.6.2 → plotpy-2.6.3}/pyproject.toml +0 -0
- {plotpy-2.6.2 → plotpy-2.6.3}/qtdesigner/plotplugin.py +0 -0
- {plotpy-2.6.2 → plotpy-2.6.3}/requirements.txt +0 -0
- {plotpy-2.6.2 → plotpy-2.6.3}/setup.cfg +0 -0
- {plotpy-2.6.2 → plotpy-2.6.3}/src/arrays.hpp +0 -0
- {plotpy-2.6.2 → plotpy-2.6.3}/src/debug.hpp +0 -0
- {plotpy-2.6.2 → plotpy-2.6.3}/src/histogram2d.pyx +0 -0
- {plotpy-2.6.2 → plotpy-2.6.3}/src/mandelbrot.pyx +0 -0
- {plotpy-2.6.2 → plotpy-2.6.3}/src/points.hpp +0 -0
- {plotpy-2.6.2 → plotpy-2.6.3}/src/scaler.hpp +0 -0
- {plotpy-2.6.2 → plotpy-2.6.3}/src/traits.hpp +0 -0
|
@@ -1,5 +1,28 @@
|
|
|
1
1
|
# Changelog #
|
|
2
2
|
|
|
3
|
+
## Version 2.6.3 ##
|
|
4
|
+
|
|
5
|
+
🧯 In this release, test coverage is 79%.
|
|
6
|
+
|
|
7
|
+
🛠️ Bug fixes:
|
|
8
|
+
|
|
9
|
+
* [Issue #25](https://github.com/PlotPyStack/PlotPy/issues/25) - `OverflowError` with Contrast Adjustment panel for constant images
|
|
10
|
+
* When updating image parameters (`ImageParam`) from the associated item object:
|
|
11
|
+
* If `xmin`, `xmax`, `ymin`, `ymax` attributes are not yet set (i.e. `None`), do not update them with the image data bounds
|
|
12
|
+
* Previous behavior was to update them with the image data bounds, which was leading to breaking the automatic bounds update when the image data is updated
|
|
13
|
+
* [Issue #24](https://github.com/PlotPyStack/PlotPy/issues/24) - Colormap: side effect on image axes when changing the colormap
|
|
14
|
+
* [Issue #23](https://github.com/PlotPyStack/PlotPy/issues/23) - Windows: Image `_scaler` engine performance regression
|
|
15
|
+
* PySide6 compatibility issues:
|
|
16
|
+
* Fixed deprecated call to `QMouseEvent` in `tests/unit/utils.py`
|
|
17
|
+
* Added workaround for `QPolygonF` shape point slicing
|
|
18
|
+
* [Issue #21](https://github.com/PlotPyStack/PlotPy/issues/21) - PySide6 on Linux: segfault in test_colormap_editor.py
|
|
19
|
+
* Fixed `sliderMoved` signal connection in `ColorMapEditor`
|
|
20
|
+
* Fixed `AssertionError` in test_rect_zoom.py (Linux, Python 3.12, PyQt6)
|
|
21
|
+
* Fixed typing issues in `plotpy.events` module:
|
|
22
|
+
* Event objects were not properly typed (`QtCore.QEvent` instead of `QtGui.QMouseEvent`)
|
|
23
|
+
* Event position arguments were not properly typed (`QtCore.QPoint` instead of `QtCore.QPointF`)
|
|
24
|
+
* Fix NumPy `FutureWarning: Format strings passed to MaskedConstant are ignored [...]` when displaying masked pixel coordinates
|
|
25
|
+
|
|
3
26
|
## Version 2.6.2 ##
|
|
4
27
|
|
|
5
28
|
💥 New features / Enhancements:
|
|
@@ -20,7 +20,7 @@ External resources:
|
|
|
20
20
|
.. _GitHub: https://github.com/PierreRaybaut/plotpy
|
|
21
21
|
"""
|
|
22
22
|
|
|
23
|
-
__version__ = "2.6.
|
|
23
|
+
__version__ = "2.6.3"
|
|
24
24
|
__VERSION__ = tuple([int(number) for number in __version__.split(".")])
|
|
25
25
|
|
|
26
26
|
# --- Important note: DATAPATH and LOCALEPATH are used by guidata.configtools
|
|
@@ -98,6 +98,7 @@ from plotpy.items.shape.marker import Marker
|
|
|
98
98
|
|
|
99
99
|
if TYPE_CHECKING:
|
|
100
100
|
from qtpy.QtCore import QPoint
|
|
101
|
+
from qtpy.QtGui import QMouseEvent
|
|
101
102
|
|
|
102
103
|
from plotpy.plot.base import BasePlot
|
|
103
104
|
|
|
@@ -259,7 +260,7 @@ class MouseEventMatch(EventMatch):
|
|
|
259
260
|
"""Return the set of event types handled by this event match"""
|
|
260
261
|
return frozenset((self.evt_type,))
|
|
261
262
|
|
|
262
|
-
def __call__(self, event:
|
|
263
|
+
def __call__(self, event: QMouseEvent) -> bool:
|
|
263
264
|
"""Returns True if the event matches the event match
|
|
264
265
|
|
|
265
266
|
Args:
|
|
@@ -282,7 +283,7 @@ class MouseEventMatch(EventMatch):
|
|
|
282
283
|
|
|
283
284
|
|
|
284
285
|
class MouseMoveMatch(MouseEventMatch):
|
|
285
|
-
def __call__(self, event:
|
|
286
|
+
def __call__(self, event: QMouseEvent) -> bool:
|
|
286
287
|
"""Returns True if the event matches the event match
|
|
287
288
|
|
|
288
289
|
Args:
|
|
@@ -655,7 +656,7 @@ class DragHandler(QC.QObject):
|
|
|
655
656
|
self.last = QC.QPointF(pos)
|
|
656
657
|
return dx, dy
|
|
657
658
|
|
|
658
|
-
def start_tracking(self, _filter: StatefulEventFilter, event:
|
|
659
|
+
def start_tracking(self, _filter: StatefulEventFilter, event: QMouseEvent) -> None:
|
|
659
660
|
"""Start tracking the mouse movement
|
|
660
661
|
|
|
661
662
|
Args:
|
|
@@ -664,7 +665,7 @@ class DragHandler(QC.QObject):
|
|
|
664
665
|
"""
|
|
665
666
|
self.start = self.last = QC.QPointF(event.pos())
|
|
666
667
|
|
|
667
|
-
def start_moving(self, filter: StatefulEventFilter, event:
|
|
668
|
+
def start_moving(self, filter: StatefulEventFilter, event: QMouseEvent) -> None:
|
|
668
669
|
"""Start moving the mouse
|
|
669
670
|
|
|
670
671
|
Args:
|
|
@@ -673,7 +674,7 @@ class DragHandler(QC.QObject):
|
|
|
673
674
|
"""
|
|
674
675
|
return self.move(filter, event)
|
|
675
676
|
|
|
676
|
-
def stop_tracking(self, _filter: StatefulEventFilter, _event:
|
|
677
|
+
def stop_tracking(self, _filter: StatefulEventFilter, _event: QMouseEvent) -> None:
|
|
677
678
|
"""Stop tracking the mouse movement
|
|
678
679
|
|
|
679
680
|
Args:
|
|
@@ -683,7 +684,7 @@ class DragHandler(QC.QObject):
|
|
|
683
684
|
pass
|
|
684
685
|
# filter.plot.canvas().setMouseTracking(self.parent_tracking)
|
|
685
686
|
|
|
686
|
-
def stop_notmoving(self, filter: StatefulEventFilter, event:
|
|
687
|
+
def stop_notmoving(self, filter: StatefulEventFilter, event: QMouseEvent) -> None:
|
|
687
688
|
"""Stop tracking the mouse movement when the mouse is not moving.
|
|
688
689
|
|
|
689
690
|
Args:
|
|
@@ -692,7 +693,7 @@ class DragHandler(QC.QObject):
|
|
|
692
693
|
"""
|
|
693
694
|
self.stop_tracking(filter, event)
|
|
694
695
|
|
|
695
|
-
def stop_moving(self, filter: StatefulEventFilter, event:
|
|
696
|
+
def stop_moving(self, filter: StatefulEventFilter, event: QMouseEvent) -> None:
|
|
696
697
|
"""Stop moving the mouse
|
|
697
698
|
|
|
698
699
|
Args:
|
|
@@ -701,7 +702,7 @@ class DragHandler(QC.QObject):
|
|
|
701
702
|
"""
|
|
702
703
|
self.stop_tracking(filter, event)
|
|
703
704
|
|
|
704
|
-
def move(self, filter: StatefulEventFilter, event:
|
|
705
|
+
def move(self, filter: StatefulEventFilter, event: QMouseEvent) -> None:
|
|
705
706
|
"""Move the mouse
|
|
706
707
|
|
|
707
708
|
Args:
|
|
@@ -755,28 +756,28 @@ class ClickHandler(QC.QObject):
|
|
|
755
756
|
class PanHandler(DragHandler):
|
|
756
757
|
cursor = QC.Qt.ClosedHandCursor
|
|
757
758
|
|
|
758
|
-
def move(self, filter: StatefulEventFilter, event:
|
|
759
|
+
def move(self, filter: StatefulEventFilter, event: QMouseEvent) -> None:
|
|
759
760
|
"""Move the mouse.
|
|
760
761
|
|
|
761
762
|
Args:
|
|
762
763
|
filter: The StatefulEventFilter instance.
|
|
763
764
|
event: The mouse event.
|
|
764
765
|
"""
|
|
765
|
-
x_state, y_state = self.get_move_state(filter, event.pos())
|
|
766
|
+
x_state, y_state = self.get_move_state(filter, QC.QPointF(event.pos()))
|
|
766
767
|
filter.plot.do_pan_view(x_state, y_state)
|
|
767
768
|
|
|
768
769
|
|
|
769
770
|
class ZoomHandler(DragHandler):
|
|
770
771
|
cursor = QC.Qt.SizeAllCursor
|
|
771
772
|
|
|
772
|
-
def move(self, filter: StatefulEventFilter, event:
|
|
773
|
+
def move(self, filter: StatefulEventFilter, event: QMouseEvent) -> None:
|
|
773
774
|
"""Move the mouse.
|
|
774
775
|
|
|
775
776
|
Args:
|
|
776
777
|
filter: The StatefulEventFilter instance.
|
|
777
778
|
event: The mouse event.
|
|
778
779
|
"""
|
|
779
|
-
x_state, y_state = self.get_move_state(filter, event.pos())
|
|
780
|
+
x_state, y_state = self.get_move_state(filter, QC.QPointF(event.pos()))
|
|
780
781
|
filter.plot.do_zoom_view(x_state, y_state)
|
|
781
782
|
|
|
782
783
|
|
|
@@ -1144,7 +1145,7 @@ class QtDragHandler(DragHandler):
|
|
|
1144
1145
|
#: Signal emitted by QtDragHandler when moving
|
|
1145
1146
|
SIG_MOVE = QC.Signal(object, "QEvent")
|
|
1146
1147
|
|
|
1147
|
-
def start_tracking(self, filter: StatefulEventFilter, event:
|
|
1148
|
+
def start_tracking(self, filter: StatefulEventFilter, event: QMouseEvent) -> None:
|
|
1148
1149
|
"""Starts tracking the drag event.
|
|
1149
1150
|
|
|
1150
1151
|
Args:
|
|
@@ -1154,7 +1155,7 @@ class QtDragHandler(DragHandler):
|
|
|
1154
1155
|
DragHandler.start_tracking(self, filter, event)
|
|
1155
1156
|
self.SIG_START_TRACKING.emit(filter, event)
|
|
1156
1157
|
|
|
1157
|
-
def stop_notmoving(self, filter: StatefulEventFilter, event:
|
|
1158
|
+
def stop_notmoving(self, filter: StatefulEventFilter, event: QMouseEvent) -> None:
|
|
1158
1159
|
"""Stops tracking when the drag event is not moving.
|
|
1159
1160
|
|
|
1160
1161
|
Args:
|
|
@@ -1163,7 +1164,7 @@ class QtDragHandler(DragHandler):
|
|
|
1163
1164
|
"""
|
|
1164
1165
|
self.SIG_STOP_NOT_MOVING.emit(filter, event)
|
|
1165
1166
|
|
|
1166
|
-
def stop_moving(self, filter: StatefulEventFilter, event:
|
|
1167
|
+
def stop_moving(self, filter: StatefulEventFilter, event: QMouseEvent) -> None:
|
|
1167
1168
|
"""
|
|
1168
1169
|
Stops the movement of the drag event.
|
|
1169
1170
|
|
|
@@ -1173,7 +1174,7 @@ class QtDragHandler(DragHandler):
|
|
|
1173
1174
|
"""
|
|
1174
1175
|
self.SIG_STOP_MOVING.emit(filter, event)
|
|
1175
1176
|
|
|
1176
|
-
def move(self, filter: StatefulEventFilter, event:
|
|
1177
|
+
def move(self, filter: StatefulEventFilter, event: QMouseEvent) -> None:
|
|
1177
1178
|
"""Handles the move event.
|
|
1178
1179
|
|
|
1179
1180
|
Args:
|
|
@@ -1655,7 +1656,7 @@ class RectangularSelectionHandler(DragHandler):
|
|
|
1655
1656
|
self.setup_shape_cb = setup_shape_cb
|
|
1656
1657
|
self.avoid_null_shape = avoid_null_shape
|
|
1657
1658
|
|
|
1658
|
-
def start_tracking(self, filter: StatefulEventFilter, event:
|
|
1659
|
+
def start_tracking(self, filter: StatefulEventFilter, event: QMouseEvent) -> None:
|
|
1659
1660
|
"""Start tracking the mouse movement for selection and interaction.
|
|
1660
1661
|
|
|
1661
1662
|
Args:
|
|
@@ -1664,7 +1665,7 @@ class RectangularSelectionHandler(DragHandler):
|
|
|
1664
1665
|
"""
|
|
1665
1666
|
self.start = self.last = QC.QPointF(event.pos())
|
|
1666
1667
|
|
|
1667
|
-
def start_moving(self, filter: StatefulEventFilter, event:
|
|
1668
|
+
def start_moving(self, filter: StatefulEventFilter, event: QMouseEvent) -> None:
|
|
1668
1669
|
"""Start moving the object.
|
|
1669
1670
|
|
|
1670
1671
|
Args:
|
|
@@ -1676,7 +1677,7 @@ class RectangularSelectionHandler(DragHandler):
|
|
|
1676
1677
|
if self.avoid_null_shape:
|
|
1677
1678
|
self.start -= QC.QPointF(1, 1)
|
|
1678
1679
|
self.shape.move_local_point_to(self.shape_h0, self.start)
|
|
1679
|
-
self.shape.move_local_point_to(self.shape_h1, event.pos())
|
|
1680
|
+
self.shape.move_local_point_to(self.shape_h1, QC.QPointF(event.pos()))
|
|
1680
1681
|
self.start_moving_action(filter, event)
|
|
1681
1682
|
if self.setup_shape_cb is not None:
|
|
1682
1683
|
self.setup_shape_cb(self.shape)
|
|
@@ -1684,7 +1685,7 @@ class RectangularSelectionHandler(DragHandler):
|
|
|
1684
1685
|
filter.plot.replot()
|
|
1685
1686
|
|
|
1686
1687
|
def start_moving_action(
|
|
1687
|
-
self, filter: StatefulEventFilter, event:
|
|
1688
|
+
self, filter: StatefulEventFilter, event: QMouseEvent
|
|
1688
1689
|
) -> None:
|
|
1689
1690
|
"""Start moving the object.
|
|
1690
1691
|
|
|
@@ -1694,18 +1695,18 @@ class RectangularSelectionHandler(DragHandler):
|
|
|
1694
1695
|
"""
|
|
1695
1696
|
pass
|
|
1696
1697
|
|
|
1697
|
-
def move(self, filter: StatefulEventFilter, event:
|
|
1698
|
+
def move(self, filter: StatefulEventFilter, event: QMouseEvent) -> None:
|
|
1698
1699
|
"""Move the object.
|
|
1699
1700
|
|
|
1700
1701
|
Args:
|
|
1701
1702
|
filter: The StatefulEventFilter instance.
|
|
1702
1703
|
event: The mouse event.
|
|
1703
1704
|
"""
|
|
1704
|
-
self.shape.move_local_point_to(self.shape_h1, event.pos())
|
|
1705
|
+
self.shape.move_local_point_to(self.shape_h1, QC.QPointF(event.pos()))
|
|
1705
1706
|
self.move_action(filter, event)
|
|
1706
1707
|
filter.plot.replot()
|
|
1707
1708
|
|
|
1708
|
-
def move_action(self, filter: StatefulEventFilter, event:
|
|
1709
|
+
def move_action(self, filter: StatefulEventFilter, event: QMouseEvent) -> None:
|
|
1709
1710
|
"""Move the object.
|
|
1710
1711
|
|
|
1711
1712
|
Args:
|
|
@@ -1714,7 +1715,7 @@ class RectangularSelectionHandler(DragHandler):
|
|
|
1714
1715
|
"""
|
|
1715
1716
|
pass
|
|
1716
1717
|
|
|
1717
|
-
def stop_moving(self, filter: StatefulEventFilter, event:
|
|
1718
|
+
def stop_moving(self, filter: StatefulEventFilter, event: QMouseEvent) -> None:
|
|
1718
1719
|
"""Stop moving the object.
|
|
1719
1720
|
|
|
1720
1721
|
Args:
|
|
@@ -1725,20 +1726,22 @@ class RectangularSelectionHandler(DragHandler):
|
|
|
1725
1726
|
self.stop_moving_action(filter, event)
|
|
1726
1727
|
filter.plot.replot()
|
|
1727
1728
|
|
|
1728
|
-
def stop_moving_action(
|
|
1729
|
+
def stop_moving_action(
|
|
1730
|
+
self, filter: StatefulEventFilter, event: QMouseEvent
|
|
1731
|
+
) -> None:
|
|
1729
1732
|
"""Stop moving the object.
|
|
1730
1733
|
|
|
1731
1734
|
Args:
|
|
1732
1735
|
filter: The StatefulEventFilter instance.
|
|
1733
1736
|
event: The mouse event.
|
|
1734
1737
|
"""
|
|
1735
|
-
self.SIG_END_RECT.emit(filter, self.start, event.pos())
|
|
1738
|
+
self.SIG_END_RECT.emit(filter, self.start, QC.QPointF(event.pos()))
|
|
1736
1739
|
|
|
1737
1740
|
|
|
1738
1741
|
class PointSelectionHandler(RectangularSelectionHandler):
|
|
1739
1742
|
"""Class to handle point selections."""
|
|
1740
1743
|
|
|
1741
|
-
def stop_notmoving(self, filter: StatefulEventFilter, event:
|
|
1744
|
+
def stop_notmoving(self, filter: StatefulEventFilter, event: QMouseEvent) -> None:
|
|
1742
1745
|
"""Stop the point selection when the point is not moving.
|
|
1743
1746
|
|
|
1744
1747
|
Args:
|
|
@@ -1751,14 +1754,16 @@ class PointSelectionHandler(RectangularSelectionHandler):
|
|
|
1751
1754
|
class ZoomRectHandler(RectangularSelectionHandler):
|
|
1752
1755
|
"""Class to handle zoom rectangles."""
|
|
1753
1756
|
|
|
1754
|
-
def stop_moving_action(
|
|
1757
|
+
def stop_moving_action(
|
|
1758
|
+
self, filter: StatefulEventFilter, event: QMouseEvent
|
|
1759
|
+
) -> None:
|
|
1755
1760
|
"""Stop moving the object.
|
|
1756
1761
|
|
|
1757
1762
|
Args:
|
|
1758
1763
|
filter: The StatefulEventFilter instance.
|
|
1759
1764
|
event: The mouse event.
|
|
1760
1765
|
"""
|
|
1761
|
-
filter.plot.do_zoom_rect_view(self.start, event.pos())
|
|
1766
|
+
filter.plot.do_zoom_rect_view(self.start, QC.QPointF(event.pos()))
|
|
1762
1767
|
|
|
1763
1768
|
|
|
1764
1769
|
def setup_standard_tool_filter(filter: StatefulEventFilter, start_state: int) -> int:
|
|
@@ -27,20 +27,29 @@ class _GenericRangeSlider(_GenericSlider):
|
|
|
27
27
|
integers.
|
|
28
28
|
"""
|
|
29
29
|
|
|
30
|
-
#
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
#
|
|
34
|
-
#
|
|
35
|
-
|
|
36
|
-
|
|
30
|
+
# -- BEGIN -- Original implementation, causing segfault on Linux with PySide6
|
|
31
|
+
# https://github.com/PlotPyStack/PlotPy/issues/21
|
|
32
|
+
# _valuesChanged = Signal(tuple)
|
|
33
|
+
# _slidersMoved = Signal(tuple)
|
|
34
|
+
# -- END --
|
|
35
|
+
|
|
36
|
+
# -- BEGIN -- New implementation: avoid segfault by overriding the class attributes
|
|
37
|
+
# instead of overriding them through instance attributes in `__init__`
|
|
38
|
+
valueChanged = Signal(tuple)
|
|
39
|
+
sliderMoved = Signal(tuple)
|
|
40
|
+
# -- END --
|
|
37
41
|
|
|
38
42
|
def __init__(self, *args, **kwargs):
|
|
39
43
|
self._style = RangeSliderStyle()
|
|
40
44
|
|
|
41
45
|
super().__init__(*args, **kwargs)
|
|
42
|
-
|
|
43
|
-
|
|
46
|
+
|
|
47
|
+
# -- BEGIN -- Original implementation, causing segfault on Linux with PySide6
|
|
48
|
+
# https://github.com/PlotPyStack/PlotPy/issues/21
|
|
49
|
+
# self.valueChanged = self._valuesChanged
|
|
50
|
+
# self.sliderMoved = self._slidersMoved
|
|
51
|
+
# -- END --
|
|
52
|
+
|
|
44
53
|
# list of values
|
|
45
54
|
self._value: List[_T] = [20, 80]
|
|
46
55
|
|
|
@@ -19,6 +19,7 @@ So that's what `_GenericSlider` is below.
|
|
|
19
19
|
scalar (with one handle per item), and it forms the basis of
|
|
20
20
|
QRangeSlider.
|
|
21
21
|
"""
|
|
22
|
+
|
|
22
23
|
import os
|
|
23
24
|
import platform
|
|
24
25
|
from typing import TypeVar
|
|
@@ -59,9 +60,19 @@ USE_MAC_SLIDER_PATCH = (
|
|
|
59
60
|
|
|
60
61
|
|
|
61
62
|
class _GenericSlider(QSlider):
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
|
|
63
|
+
# -- BEGIN -- Original implementation, causing segfault on Linux with PySide6
|
|
64
|
+
# https://github.com/PlotPyStack/PlotPy/issues/21
|
|
65
|
+
# _fvalueChanged = Signal(int)
|
|
66
|
+
# _fsliderMoved = Signal(int)
|
|
67
|
+
# _frangeChanged = Signal(int, int)
|
|
68
|
+
# -- END --
|
|
69
|
+
|
|
70
|
+
# -- BEGIN -- New implementation: avoid segfault by overriding the class attributes
|
|
71
|
+
# instead of overriding them through instance attributes in `__init__`
|
|
72
|
+
valueChanged = Signal(int)
|
|
73
|
+
sliderMoved = Signal(int)
|
|
74
|
+
rangeChanged = Signal(int, int)
|
|
75
|
+
# -- END --
|
|
65
76
|
|
|
66
77
|
MAX_DISPLAY = 5000
|
|
67
78
|
|
|
@@ -88,9 +99,13 @@ class _GenericSlider(QSlider):
|
|
|
88
99
|
self._control_fraction = 0.04
|
|
89
100
|
|
|
90
101
|
super().__init__(*args, **kwargs)
|
|
91
|
-
|
|
92
|
-
|
|
93
|
-
|
|
102
|
+
|
|
103
|
+
# -- BEGIN -- Original implementation, causing segfault on Linux with PySide6
|
|
104
|
+
# https://github.com/PlotPyStack/PlotPy/issues/21
|
|
105
|
+
# self.valueChanged = self._fvalueChanged
|
|
106
|
+
# self.sliderMoved = self._fsliderMoved
|
|
107
|
+
# self.rangeChanged = self._frangeChanged
|
|
108
|
+
# -- END --
|
|
94
109
|
|
|
95
110
|
self.setAttribute(Qt.WidgetAttribute.WA_Hover)
|
|
96
111
|
self.setStyleSheet("")
|
|
@@ -398,7 +398,8 @@ class BaseImageItem(QwtPlotItem):
|
|
|
398
398
|
"""
|
|
399
399
|
title = self.title().text()
|
|
400
400
|
z = self.get_data(x, y)
|
|
401
|
-
|
|
401
|
+
zstr = "--" if z is np.ma.masked else f"{z:g}"
|
|
402
|
+
return f"{title}:<br>x = {int(x):d}<br>y = {int(y):d}<br>z = {zstr}"
|
|
402
403
|
|
|
403
404
|
def set_background_color(self, qcolor: QColor | str) -> None:
|
|
404
405
|
"""Set background color
|
|
@@ -276,8 +276,10 @@ class PolygonShape(AbstractShape):
|
|
|
276
276
|
painter.setBrush(brush)
|
|
277
277
|
points = self.transform_points(xMap, yMap)
|
|
278
278
|
if self.ADDITIONNAL_POINTS:
|
|
279
|
-
|
|
280
|
-
|
|
279
|
+
# Slice indexing is not supported by PySide6, so we convert the `QPolygonF`
|
|
280
|
+
# object to a list before converting it back to a `QPolygonF` object:
|
|
281
|
+
shape_points = QG.QPolygonF(list(points)[: -self.ADDITIONNAL_POINTS])
|
|
282
|
+
other_points = QG.QPolygonF(list(points)[-self.ADDITIONNAL_POINTS :])
|
|
281
283
|
else:
|
|
282
284
|
shape_points = points
|
|
283
285
|
other_points = []
|
|
@@ -22,7 +22,9 @@ if TYPE_CHECKING:
|
|
|
22
22
|
import qwt.scale_map
|
|
23
23
|
from qtpy.QtCore import QPointF, QRectF
|
|
24
24
|
from qtpy.QtGui import QPainter
|
|
25
|
+
from qwt import QwtSymbol
|
|
25
26
|
|
|
27
|
+
from plotpy.plot import BasePlot
|
|
26
28
|
from plotpy.styles.base import ItemParameters
|
|
27
29
|
|
|
28
30
|
|
|
@@ -48,7 +50,7 @@ class XRangeSelection(AbstractShape):
|
|
|
48
50
|
self.shapeparam = RangeShapeParam(_("Range"), icon="xrange.png")
|
|
49
51
|
self.shapeparam.read_config(CONF, "histogram", "range")
|
|
50
52
|
else:
|
|
51
|
-
self.shapeparam = shapeparam
|
|
53
|
+
self.shapeparam: RangeShapeParam = shapeparam
|
|
52
54
|
self.pen = None
|
|
53
55
|
self.sel_pen = None
|
|
54
56
|
self.brush = None
|
|
@@ -78,7 +80,7 @@ class XRangeSelection(AbstractShape):
|
|
|
78
80
|
def __setstate__(self, state: tuple) -> None:
|
|
79
81
|
"""Restore state information from pickling"""
|
|
80
82
|
self.shapeparam, self._min, self._max = state
|
|
81
|
-
self.shapeparam.
|
|
83
|
+
self.shapeparam.update_item(self)
|
|
82
84
|
|
|
83
85
|
def serialize(
|
|
84
86
|
self,
|
|
@@ -137,34 +139,31 @@ class XRangeSelection(AbstractShape):
|
|
|
137
139
|
yMap: Y axis scale map
|
|
138
140
|
canvasRect: Canvas rectangle
|
|
139
141
|
"""
|
|
140
|
-
plot = self.plot()
|
|
142
|
+
plot: BasePlot = self.plot()
|
|
141
143
|
if not plot:
|
|
142
144
|
return
|
|
143
145
|
if self.selected:
|
|
144
|
-
pen = self.sel_pen
|
|
145
|
-
sym = self.sel_symbol
|
|
146
|
+
pen: QG.QPen = self.sel_pen
|
|
147
|
+
sym: QwtSymbol = self.sel_symbol
|
|
146
148
|
else:
|
|
147
|
-
pen = self.pen
|
|
148
|
-
sym = self.symbol
|
|
149
|
+
pen: QG.QPen = self.pen
|
|
150
|
+
sym: QwtSymbol = self.symbol
|
|
149
151
|
|
|
150
|
-
rct = plot.canvas().contentsRect()
|
|
151
|
-
|
|
152
|
-
|
|
153
|
-
rct2.setRight(xMap.transform(self._max))
|
|
152
|
+
rct = QC.QRectF(plot.canvas().contentsRect())
|
|
153
|
+
rct.setLeft(xMap.transform(self._min))
|
|
154
|
+
rct.setRight(xMap.transform(self._max))
|
|
154
155
|
|
|
155
|
-
painter.fillRect(
|
|
156
|
+
painter.fillRect(rct, self.brush)
|
|
156
157
|
painter.setPen(pen)
|
|
157
|
-
painter.drawLine(
|
|
158
|
-
painter.drawLine(
|
|
158
|
+
painter.drawLine(rct.topLeft(), rct.bottomLeft())
|
|
159
|
+
painter.drawLine(rct.topRight(), rct.bottomRight())
|
|
160
|
+
|
|
159
161
|
dash = QG.QPen(pen)
|
|
160
162
|
dash.setStyle(QC.Qt.DashLine)
|
|
161
163
|
dash.setWidth(1)
|
|
162
164
|
painter.setPen(dash)
|
|
163
|
-
|
|
164
|
-
|
|
165
|
-
top = int(rct2.top())
|
|
166
|
-
bottom = int(rct2.bottom())
|
|
167
|
-
painter.drawLine(center_x, top, center_x, bottom)
|
|
165
|
+
cx = rct.center().x()
|
|
166
|
+
painter.drawLine(QC.QPointF(cx, rct.top()), QC.QPointF(cx, rct.bottom()))
|
|
168
167
|
|
|
169
168
|
painter.setPen(pen)
|
|
170
169
|
x0, x1, y = self.get_handles_pos()
|
|
@@ -350,12 +350,12 @@ class ImageParam(RawImageParam):
|
|
|
350
350
|
help=_("Locked images are not movable with the mouse"),
|
|
351
351
|
)
|
|
352
352
|
_xdata = BeginGroup(_("Image placement along X-axis"))
|
|
353
|
-
xmin = FloatItem(_("x|min"), default=None)
|
|
354
|
-
xmax = FloatItem(_("x|max"), default=None)
|
|
353
|
+
xmin = FloatItem(_("x|min"), default=None, check=False)
|
|
354
|
+
xmax = FloatItem(_("x|max"), default=None, check=False)
|
|
355
355
|
_end_xdata = EndGroup(_("Image placement along X-axis"))
|
|
356
356
|
_ydata = BeginGroup(_("Image placement along Y-axis"))
|
|
357
|
-
ymin = FloatItem(_("y|min"), default=None)
|
|
358
|
-
ymax = FloatItem(_("y|max"), default=None)
|
|
357
|
+
ymin = FloatItem(_("y|min"), default=None, check=False)
|
|
358
|
+
ymax = FloatItem(_("y|max"), default=None, check=False)
|
|
359
359
|
_end_ydata = EndGroup(_("Image placement along Y-axis"))
|
|
360
360
|
|
|
361
361
|
def update_param(self, item: ImageItem) -> None:
|
|
@@ -366,21 +366,9 @@ class ImageParam(RawImageParam):
|
|
|
366
366
|
"""
|
|
367
367
|
super().update_param(item)
|
|
368
368
|
self.xmin = item.xmin
|
|
369
|
-
if self.xmin is None:
|
|
370
|
-
self.xmin = 0.0
|
|
371
369
|
self.ymin = item.ymin
|
|
372
|
-
if self.ymin is None:
|
|
373
|
-
self.ymin = 0.0
|
|
374
|
-
if item.is_empty():
|
|
375
|
-
shape = (0, 0)
|
|
376
|
-
else:
|
|
377
|
-
shape = item.data.shape
|
|
378
370
|
self.xmax = item.xmax
|
|
379
|
-
if self.xmax is None:
|
|
380
|
-
self.xmax = float(shape[1])
|
|
381
371
|
self.ymax = item.ymax
|
|
382
|
-
if self.ymax is None:
|
|
383
|
-
self.ymax = float(shape[0])
|
|
384
372
|
|
|
385
373
|
def update_item(self, item: ImageItem) -> None:
|
|
386
374
|
"""Update the given image item from the parameters.
|
|
@@ -23,6 +23,7 @@ import numpy as np
|
|
|
23
23
|
import pytest
|
|
24
24
|
from guidata.qthelpers import exec_dialog, qt_app_context
|
|
25
25
|
from qtpy import QtCore as QC
|
|
26
|
+
from qtpy import QtGui as QG
|
|
26
27
|
from qtpy import QtWidgets as QW
|
|
27
28
|
|
|
28
29
|
from plotpy.builder import make
|
|
@@ -31,31 +32,33 @@ from plotpy.tests import data as ptd
|
|
|
31
32
|
from plotpy.tools import LockLUTRangeTool
|
|
32
33
|
|
|
33
34
|
|
|
34
|
-
def get_data() -> np.ndarray:
|
|
35
|
+
def get_data(variable_size: bool) -> np.ndarray:
|
|
35
36
|
"""Compute 2D Gaussian data and add a narrower Gaussian on top with a random
|
|
36
37
|
position and amplitude."""
|
|
38
|
+
size = np.random.randint(50, 200) if variable_size else 100
|
|
37
39
|
dtype = np.uint16
|
|
38
40
|
amp = np.iinfo(dtype).max * 0.3
|
|
39
|
-
data = ptd.gen_2d_gaussian(
|
|
41
|
+
data = ptd.gen_2d_gaussian(size, dtype, sigma=10.0, x0=0.0, y0=0.0, amp=amp)
|
|
40
42
|
# Choose a random position: x0, y0 have to be in the range [-10.0, 10.0]
|
|
41
43
|
x0 = np.random.uniform(-10.0, 10.0)
|
|
42
44
|
y0 = np.random.uniform(-10.0, 10.0)
|
|
43
45
|
# Choose a random amplitude: a has to be in the range [0.1, 0.5]
|
|
44
46
|
a = np.random.uniform(0.1, 0.7) * np.iinfo(dtype).max
|
|
45
47
|
# Add the narrower Gaussian on top
|
|
46
|
-
data += ptd.gen_2d_gaussian(
|
|
48
|
+
data += ptd.gen_2d_gaussian(size, dtype, sigma=4.0, x0=x0, y0=y0, amp=a)
|
|
47
49
|
return data
|
|
48
50
|
|
|
49
51
|
|
|
50
52
|
class ImageUpdateDialog(PlotDialog):
|
|
51
53
|
"""Dialog box for image update"""
|
|
52
54
|
|
|
53
|
-
def __init__(self, title):
|
|
55
|
+
def __init__(self, title: str, variable_size: bool = False) -> None:
|
|
56
|
+
self.variable_size = variable_size
|
|
54
57
|
options = PlotOptions(title="-", show_contrast=True, type="image")
|
|
55
58
|
super().__init__(title=title, toolbar=True, edit=False, options=options)
|
|
56
59
|
self.resize(600, 600)
|
|
57
60
|
self.timer = QC.QTimer()
|
|
58
|
-
self.item = make.image(get_data(), interpolation="nearest")
|
|
61
|
+
self.item = make.image(get_data(self.variable_size), interpolation="nearest")
|
|
59
62
|
self.item.set_lut_range((15000, 28000))
|
|
60
63
|
plot = self.get_plot()
|
|
61
64
|
plot.add_item(self.item)
|
|
@@ -63,7 +66,7 @@ class ImageUpdateDialog(PlotDialog):
|
|
|
63
66
|
self.counter = 0
|
|
64
67
|
self.keep_lut_cb: QW.QCheckBox | None = None
|
|
65
68
|
|
|
66
|
-
def populate_plot_layout(self):
|
|
69
|
+
def populate_plot_layout(self) -> None:
|
|
67
70
|
"""Populate the plot layout"""
|
|
68
71
|
start_btn = QW.QPushButton("Start image update")
|
|
69
72
|
start_btn.clicked.connect(self.start_image_update)
|
|
@@ -74,9 +77,17 @@ class ImageUpdateDialog(PlotDialog):
|
|
|
74
77
|
self.keep_lut_cb = QW.QCheckBox()
|
|
75
78
|
self.keep_lut_cb.setChecked(False)
|
|
76
79
|
self.add_widget(self.keep_lut_cb, 0, 2)
|
|
80
|
+
variable_size_cb = QW.QCheckBox("Variable size")
|
|
81
|
+
variable_size_cb.setChecked(self.variable_size)
|
|
82
|
+
variable_size_cb.stateChanged.connect(self.toggle_variable_size)
|
|
83
|
+
self.add_widget(variable_size_cb, 0, 3)
|
|
77
84
|
self.add_widget(self.plot_widget, 1, 0, 1, 0)
|
|
78
85
|
|
|
79
|
-
def
|
|
86
|
+
def toggle_variable_size(self, state: int) -> None:
|
|
87
|
+
"""Toggle the variable size of the image"""
|
|
88
|
+
self.variable_size = state == QC.Qt.Checked
|
|
89
|
+
|
|
90
|
+
def register_tools(self) -> None:
|
|
80
91
|
"""Reimplement to connect the Keep LUT range checkbox to the item"""
|
|
81
92
|
mgr = self.get_manager()
|
|
82
93
|
keep_lut_tool = mgr.add_tool(LockLUTRangeTool)
|
|
@@ -87,18 +98,18 @@ class ImageUpdateDialog(PlotDialog):
|
|
|
87
98
|
self.keep_lut_cb.setToolTip(keep_lut_tool.action.toolTip())
|
|
88
99
|
self.keep_lut_cb.stateChanged.connect(keep_lut_tool.activate)
|
|
89
100
|
|
|
90
|
-
def start_image_update(self):
|
|
101
|
+
def start_image_update(self) -> None:
|
|
91
102
|
"""Start updating the image"""
|
|
92
103
|
self.timer.timeout.connect(self.update_image)
|
|
93
104
|
self.timer.start(500)
|
|
94
105
|
|
|
95
|
-
def stop_image_update(self):
|
|
106
|
+
def stop_image_update(self) -> None:
|
|
96
107
|
"""Stop updating the image"""
|
|
97
108
|
self.timer.stop()
|
|
98
109
|
|
|
99
|
-
def update_image(self):
|
|
110
|
+
def update_image(self) -> None:
|
|
100
111
|
"""Update the image"""
|
|
101
|
-
data = get_data()
|
|
112
|
+
data = get_data(self.variable_size)
|
|
102
113
|
self.counter += 1
|
|
103
114
|
plot = self.get_plot()
|
|
104
115
|
|
|
@@ -111,7 +122,7 @@ class ImageUpdateDialog(PlotDialog):
|
|
|
111
122
|
plot.set_title(f"Image update {self.counter:03d}")
|
|
112
123
|
plot.replot()
|
|
113
124
|
|
|
114
|
-
def closeEvent(self, event):
|
|
125
|
+
def closeEvent(self, event: QG.QCloseEvent) -> None:
|
|
115
126
|
"""Reimplement closeEvent to stop the timer before closing the dialog"""
|
|
116
127
|
self.timer.stop()
|
|
117
128
|
super().closeEvent(event)
|