gecos-lab / PZero

GNU Affero General Public License v3.0
22 stars 2 forks source link

GUI refactoring #41

Open andrea-bistacchi opened 1 year ago

andrea-bistacchi commented 1 year ago

All windows (e.g. 3D windows, maps windows, etc.) are now Qt Main Windows. It would be better to convert them to child windows with respect to the main project window, but retain the possibility do detach them and float theme everywhere on the desktop using the QT QDockWidget Class.

mcbaguetti commented 1 year ago

I found out why the project_window wasn't being shown above the windows, and this was still an issue even with the QDockWidget when detached. A widget initialized with the parent reference will always stay on top of the parent.

My idea is to leave the secondary windows as QMainWindows because they have a better UI structure but if we want to change to QDockWidget it could be possible anyways. If you want to try, I pushed the update on the theme branch.

Also, I checked if there were issues with removing the parent inside the secondary window initialization and I didn't find anything that could be a problem. Memory leaks can't happen inside the secondary windows because we have already set the attribute deleteOnClose which is responsible for removing all the window references.

andrea-bistacchi commented 1 year ago

Well done! I propose we test the theme branch and see if we prefer the different feel.

Regarding "A widget initialised with the parent reference will always stay on top of the parent", at least when docked the child windows will not be overlapped. This could be a good option for a laptop with a smaller screen.

mcbaguetti commented 1 year ago

Actually, you can test both the window configurations: the one with QMainWindow as a secondary window is on the theme branch and the one with QDockWidget is on the env_testing branch.

The only thing missing on the QDockWidget is the toolbar/menubar which will be added this week but it doesn't affect the layout testing.

andrea-bistacchi commented 1 year ago

Great, I'll try tomorrow. I was in the field these days.

andrea-bistacchi commented 1 year ago

Hi, I really like the QDockWidget solution!

image

If also the tabs (Geology, X sections, Boundaries, etc.) could go in a dockable widget, it would be almost perfect.

Then there are just some details to be fixed, but they seem very simple issues. I have noticed these:

image image

Please everyone share your opinion!

mcbaguetti commented 1 year ago

Nice, I am glad you liked the new layout! For the last fix, on my Windows 11, I don't have this issue but it could be window size-dependent. For the PyVista canvas, I will be searching in the next few days and also I think it will be possible to make the tabs dockable!

andrea-bistacchi commented 1 year ago

Hi,

1) The size-issue is that when the window is resized, the canvas remains the same size and a grey border appears. There should be some property of PyVista plotter or of the Qt window that controls this.

2) Regarding making all windows dockable, including the base window with tabs (geology table, legend, etc.), I have seen this nice example.

Thinking about all this, I also would like to consider other points...

3) The base window with tabs containing tables (we could call it "project window") is the only window that should never be closed, neither duplicated. The other ones could be closed and there could be as many 3D views, X sections, etc. as the user likes.

4) We could imagine a default layout that could be called with a tool, maybe in the windows menu. This is useful when at some point you mess up everything and do not find your windows anymore. The project window should be to the right in this default view.

5) We could consider converting the toolbars in the single windows to vertical toolbars with icons instead of text (to make them vertical, just drag them in Designer).

mcbaguetti commented 1 year ago

Hi Andrea! I made some progress and tried a bit the new configuration.

  1. Now it should be fine, the Pyvista canvas is now resizing correctly.

  2. Until now, I have been testing this idea and I noted some issues if we make the tabs (geology table, legend, etc) dockable. If I couldn't solve them because of Qt, I propose a slightly different approach but still valid: we could make the tabs re-orderable (I already implemented that on the env_testing branch) and closable (I need to implement the signal/slot for closing/reopening them). By the way, I added the possibility to GroupedDragging the QDockWidget like in your example link.

  3. I agree.

  4. Yes, I imagined a button in the toolbar for restoring the default layout and maybe we could also set other buttons for other preset layouts (if this could be useful).

  5. Do you mean the toolbar of the QDockWidgets or the toolbar of the "project_window"?

andrea-bistacchi commented 1 year ago

Hello, I like this!

image

1) Yes I confirm it can be resized. There is something strange with the lateral tree view, but it resizes when you switch from one to another.

image image image

2) OK. I cannot drag the tabs however, and I think making them "closable" will be complicated and not particularly useful, almost confusing actually.

4) We do not have toolbards anymore. You mean in the menu, probably as the last tool in the window menu.

5) I mean the toolbars of child windows. At the moment they have menus that mess up with the window title.

image

Most commands here, that are specific to each kind of window, could be controlled by a toolbar instead of menus, that could be a bit confusing since we also have menus in the project window. If you look at the layout, a vertical toolbar makes sense.

Thanks!

andrea-bistacchi commented 1 year ago

Explanation of size policy in QT 6 is here (not very intuitive).

Summarising:

QSizePolicy::Policy

This enum describes the various per-dimension sizing types used when constructing a QSizePolicy.

Constant | Value | Description -- | -- | -- QSizePolicy::Fixed | 0 | The QWidget::sizeHint() is the only acceptable alternative, so the widget can never grow or shrink (e.g. the vertical direction of a push button). QSizePolicy::Minimum | GrowFlag | The sizeHint() is minimal, and sufficient. The widget can be expanded, but there is no advantage to it being larger (e.g. the horizontal direction of a push button). It cannot be smaller than the size provided by sizeHint(). QSizePolicy::Maximum | ShrinkFlag | The sizeHint() is a maximum. The widget can be shrunk any amount without detriment if other widgets need the space (e.g. a separator line). It cannot be larger than the size provided by sizeHint(). QSizePolicy::Preferred | GrowFlag \| ShrinkFlag | The sizeHint() is best, but the widget can be shrunk and still be useful. The widget can be expanded, but there is no advantage to it being larger than sizeHint() (the default QWidget policy). QSizePolicy::Expanding | GrowFlag \| ShrinkFlag \| ExpandFlag | The sizeHint() is a sensible size, but the widget can be shrunk and still be useful. The widget can make use of extra space, so it should get as much space as possible (e.g. the horizontal direction of a horizontal slider). QSizePolicy::MinimumExpanding | GrowFlag \| ExpandFlag | The sizeHint() is minimal, and sufficient. The widget can make use of extra space, so it should get as much space as possible (e.g. the horizontal direction of a horizontal slider). QSizePolicy::Ignored | ShrinkFlag \| GrowFlag \| IgnoreFlag | The sizeHint() is ignored. The widget will get as much space as possible.

QSizePolicy::PolicyFlag

These flags are combined together to form the various Policy values:

Constant | Value | Description -- | -- | -- QSizePolicy::GrowFlag | 1 | The widget can grow beyond its size hint if necessary. QSizePolicy::ExpandFlag | 2 | The widget should get as much space as possible. QSizePolicy::ShrinkFlag | 4 | The widget can shrink below its size hint if necessary. QSizePolicy::IgnoreFlag | 8 | The widget's size hint is ignored. The widget will get as much space as possible.

QSizePolicy::PolicyFlag These flags are combined together to form the various Policy values:

andrea-bistacchi commented 1 year ago

This explains how to set a QDockWidget as not closable programmatically.

However the closable property can be set also in Designer:

image

andrea-bistacchi commented 1 year ago

Another useful widget we are not using at the moment is QMdiArea.

andrea-bistacchi commented 1 year ago

Proposal for completely reviewed layout:

We could test solutions with the entity tree for each graphical window being attached to its window (as it is now), or with a single dockable tree that is redrawn when a graphical window is activated. In this case the dataframe holding the visualisation data for each graphical should be as it is now - one dataframe for each window as a child of the window - but we would need a signal to redraw the unique tree when a window is activated.

We should decide whether to retain the terminal (in another QDockWidget?) or to remove it.

In addition, some columns could be removed from tables (e.g. uid).

Overall, I think this would result in a more familiar experience for most users, as suggested by @luca-penasa.

This means completely redrawing the interface, but maybe it is easier than struggling with the old one as yesterday.

Something like this:

image

andrea-bistacchi commented 1 year ago

Hi, I'm afraid a QMDIArea is not what we need, since its child QMDISubWindows can be stacked (default) or tabbed (optional by setting the TabbedView option) but never dragged out of the MDI area itself. I guess that e.g. the central window in Petrel is a MDI area.

Interestingly, in the Qt Overview of the Main Window Classes I read (last line) that "The central widget (of QMainWindow) can be any subclass of QWidget".

This is hugely interesting since QDockWidget is a subclass of QWidget, hence it is possible to create a dockable area covering the whole central area in main widget and use it as parent for our dockable and detachable graphic windows (3d, 2d, plots, etc.).

mcbaguetti commented 1 year ago

I made the central widget dockable, but there are a few strange things. image

If we undock the central widget, we cannot re-dock it inside the central widget area (it will re-dock on the secondary window areas). Sometimes it will appear a small blank area when we try to re-dock the central widget. Also, we need to implement again the resize policy like the secondary windows.

I think we need to decide how to implement the QDockWidget, in the example image the QDockWidget as a centralWidget contains a QTabWidget with all the tabs. We can decide to add fewer tabs or change the QTabWidget to another kind of Widget like QMDIArea or QStackWidget or maybe a plain QDockWidget.

andrea-bistacchi commented 1 year ago

Hi, I also noticed two small things, maybe not relevant but it could be worth trying.

1) we are using a mixture of PyQt 6 and 5, and particularly we using pyuic5 (so PyQt 5) instead pyuic6 of for translation of .ui files to Python. Shall we transition to a more uniform PyQt 6 release? Just to be sure some of these problems do not arise from this?

2) by making a clever use of layouts, we should be able to completely avoid setting widget dimensions manually in Qt Designer or programmatically. This is supposed to work much better, particularly in PyQt 6 that according to some docs should adapt better to high resolution monitors.

In the end, I'm afraid we should upgrade to PyQt 6, then rebuild the interface completely, using layouts and never specifying dimensions manually. Here I found a relatively clear explanation of stretch factors influencing the way automatic layouts work.

gbene commented 1 year ago

Yes I think it would be good to transition to the new Qt6. I think that the best way to approach this from scratch, is to create empty dummy interfaces without any custom signals. This speeds up the testing process and checking that the ui responds as intended.

We should check that pyvistaqt works with qt6, but it seems from https://github.com/pyvista/pyvistaqt/issues/114 that it should be implemented.

mcbaguetti commented 1 year ago

another error that I see when I try to set a Layout on the centralWidget is this one:

QWidget::setLayout: Attempting to set QLayout "horizontalLayout" on QDockWidget "centralwidget", which already has a layout

maybe the problem is that, at least in PyQt 5, we cannot override the layout of a QDockWidget if it is associated with the centralWidget of a QMainWindow?

andrea-bistacchi commented 1 year ago

I'm installing a complete and up-to-date Qt framework, within limits of GPL license (see #54). Let's see if this solves some problem, particularly Qt Creator and Qt 6.5 instead of Qt 5.

This is the link to the open-source Qt installer:

https://www.qt.io/download-qt-installer-oss?hsCtaTracking=99d9dd4f-5681-48d2-b096-470725510d34%7C074ddad0-fdef-4e53-8aa8-5e8a876d6ab4

andrea-bistacchi commented 1 year ago

OK, I immediately suggest to install the full Qt framework with Qt Creator. Most examples we discussed are included as "examples" with source code, including these ones:

image

image

image

andrea-bistacchi commented 1 year ago

However, I haven't found a way to use an Anaconda environment in Qt Creator. More to be investigated here.

andrea-bistacchi commented 1 year ago

Hi, I hope I'm progressively getting closer to the solution.

image image

I trick is to use a separate QDockWidget for each graphical window (View3D, Mape, etc.) that is no more a QMainWindow but a QWidget. In this way each graphical window can be detached, floated around, and then reattached. When you close it, you are closing the QDockWidget actually.

I implemented all this in the new AB_GUI_tests branch. There are still many problems to be solved, but it appears that the main goal can be achieved.

Note that I have used PySide6 instead of PyQt5 used previously. This requires some refactoring and it is yet to be understood if it is a good idea. In theory the differences are handled by QtPy, but this does not work all the times, and probably the same problems would apply to PyQt6.

Also some logics must be changed, including what happens when closing a graphical window.

Since the graphical widows are no more QMainWindow's, they do not have menus anymore and all actions must be reattached to QToolButtons (there is a template for this in comments), or moved to the main menu. This is an improvement since having multiple menus was a distraction and uncommon.

gbene commented 1 year ago

Hi, I am testing the new gui on linux and is not working properly. I am attaching a video because it is a bit of a strange behavior and it is hard to describe

https://github.com/andrea-bistacchi/PZero/assets/40857804/1a216c82-653c-4cc5-a5c0-1ecbfc661131

What I think is giving problems is the way we crate and attach the X view as widget. If I create a normal QtWidget (e.g. a QListWidget) everything is working as intended (note, in this video I have also modified the possibility to move the DockWidget to other areas just to see if everything works)

https://github.com/andrea-bistacchi/PZero/assets/40857804/eccc4f62-534c-4e08-8c25-0ac515815221

Why we are not seeing this same strange behavior on windows is baffling to me.

I tested it also with python 3.10 just to rule out Qt version problems.

andrea-bistacchi commented 1 year ago

I'll try with MacOs in the weekend.

andrea-bistacchi commented 1 year ago

It looks like you cannot float the QDockWidget, even if it is set as floatable.

mcbaguetti commented 12 months ago

I find this post on stackoverflow which can be a solution to our problem, we can hide the central widget of the QMainWindow as in the post and then create a separate QDockWidget for the collections/tabs.

andrea-bistacchi commented 12 months ago

Hi, I don't know if hiding the main window and having another dock widget is useful, because in any case we would not like to close the collection tabs. It might be nice to move them around but not strictly necessary.

The main problem to be solved is with linux as described by @gbene , who is doing some testing.

gbene commented 12 months ago

Alright, so I think the problem is with pyvista/vtk. I have run some tests and everything works also when using composite widgets (stereoplot view works as intended).

Another weird behavior that i found is that it seems that vtk breaks everything dock related. For example the stereoplot view works fine but if I close it and open a new vtk based view then even new stereoplot views start to behave abnormally and the only way to reset it is to close pzero.

I will investigate further

andrea-bistacchi commented 12 months ago

Hi, I found something similar here in the pyvistaqt issue #144.

andrea-bistacchi commented 12 months ago

And also here on VTK Discourse:

https://discourse.vtk.org/t/difficulty-in-resizing-moving-qdockwidgets-in-a-pyqt5-app-that-contains-a-qvtkrenderwindowinteractor-on-macos-only/7763

https://discourse.vtk.org/t/scatterplot-example-different-marker-styles-not-working/6414

https://forum.qt.io/topic/113362/qtwebengine-stops-displaying-when-undocked/11

https://github.com/githubuser0xFFFF/Qt-Advanced-Docking-System/blob/master/doc/user-guide.md

The following seems to suggest that a QFrame is needed to contain a VTK widget. I'm sure we had it in the old GUI but maybe we are missing it in the new one.

https://discourse.vtk.org/t/embedding-vtk-render-in-a-dialog-box-in-pyqt-i-e-not-using-qmainwindow/5492/3

gbene commented 12 months ago

Yup, I saw the issue. I traced it on other various sources (I think from the same author) but I cannot find them anymore tomorrow I'll try to reconnect the dots.

I think in the meantime the best way to proceed is maybe to create a separate issue? I don't know really. Also maybe @luca-penasa could try if he encounters the same behaviours on his Linux distro.

gbene commented 12 months ago

I saw now the new comment. The first link was the post I saw. I have tried the solution with qframe and didn't resolve anything.

andrea-bistacchi commented 12 months ago

Hi, it looks like a PyVista or more probably VTK bug. I suggest to create two small test cases to be submitted to those communities.

andrea-bistacchi commented 12 months ago

Hi, I've run some test on a Mac with the AB_GUI_tests branch.

Dock windows are properly created, populated with objects, and can be detached, but once detached I cannot dock them back into the dock area. Maybe this is due to limited screen size and should be checked on a larger screen.

For some reason the second window you open, if the first is already detached, goes in a strange detached position to the right. The third window on the other hand is opened in docked position as expected. I checked and this does not happen in Windows.

In any case on a Mac, with the menu fixed on top of the screen in the classical Mac interface, having independent windows as in our classical GUI seems more intuitive.

This makes me think...

andrea-bistacchi commented 12 months ago

Ok the Mac I've noticed another strange behavior. With the base environment, the ugly dark theme is used, and windows do not work properly. Seems really strage. I suggest to completely remove the dark theme branch.

More in general, we need to reduce experiments and come out with something more robust for all OSs.

gbene commented 11 months ago

All right, so I have good news and somewhat bad news. The good news is that I have apparently found the root of the problem. The bad news is that it is the same recurring problem, using conda to install packages on linux is not the best. It looks like on linux the command conda install pyqt installs:

$ (pzero) conda list
...
pyqt                      5.15.7           py38ha0d8c90_3    conda-forge
pyqt5-sip                 12.11.0          py38h8dc9893_3    conda-forge
...

On the other hand by:

  1. Removing manually pyqt5 using conda uninstall pyqt
  2. Installing pyqt5 using python3 -m pip install pyqt5 installs:
$ (pzero) conda list
...
pyqt5                     5.15.9                   pypi_0    pypi
pyqt5-qt5                 5.15.2                   pypi_0    pypi
pyqt5-sip                 12.12.1                  pypi_0    pypi
...

The latter package configuration makes everything work as intended. (I am using the python3 -m pip install pyqt5 formulation to avoid installing pyqt5 system wide)

Now the differences that I spot are the following:

  1. pyqt5 in conda is called pyqt and the version is 5.15.7 while in pip is called pyqt5 with version 5.15.9
  2. Using conda the pyqt5-qt5 package is not installed (and cannot be installed using conda install because, as far as I saw, it is not provided in the conda channels)
  3. pyqt5-sip versions are different

I think that the most important point is n.2 since a whole package is missing. On the pyqt5-qt5 pypi page the following description is provided:

This package contains the subset of a Qt installation that is required by PyQt5.

So I think that this is the problem. We should test it on MAC to see if the same applies. I do not know why this is not a problem on windows.

Moving forward we need to resolve this package manager issue that is always popping up in some way (https://github.com/andrea-bistacchi/PZero/issues/45). Maybe freezing everything in a single pzero conda package?

https://docs.conda.io/projects/conda-build/en/latest/user-guide/tutorials/build-pkgs-skeleton.html https://docs.conda.io/projects/conda-build/en/stable/

gbene commented 11 months ago

Unrelated from this dependencies topic, while trying to understand what was going wrong, I found a bit of a redundancy. It seems that the self.show_qt_canvas() method is not really necessary. Commenting it in the BaseView class does not apparently impact the functionality of the views and it also fixes the rapid flashing window bug that happens when a view is first opened (#56).

andrea-bistacchi commented 11 months ago

Hi, I guess we are no more building the environment incrementally, but instead every time we add or remove some library we rebuild a new environment from a .yml file with instructions.

This means that adding some PyPi package installed with pip should be no more a problem.

andrea-bistacchi commented 11 months ago

Well done!

andrea-bistacchi commented 11 months ago

Mixing pip and conda could potentially cause some problem.

Here is [the exact conda-only environment we are using]().

And here is [the "from-history" environment]().

There are a few strange things, e.g. qt-main 5.15.8 vs pyqt5 5.15.7.

@gbene: what happens using pip?

gbene commented 11 months ago

Sorry, the links are empty and I do not understand what are you referring to. Here are the diff of the conda list command between the standard conda only env and the "modified env" using pip:

pzero
# packages in environment at /home/gabriele/miniconda3/envs/pzero:
# Name                    Version                   Build  Channel
_libgcc_mutex             0.1                 conda_forge    conda-forge
_openmp_mutex             4.5                       2_gnu    conda-forge
affine                    2.4.0              pyhd8ed1ab_0    conda-forge
aiohttp                   3.8.4            py38h01eb140_1    conda-forge
aiosignal                 1.3.1              pyhd8ed1ab_0    conda-forge
alabaster                 0.7.13             pyhd8ed1ab_0    conda-forge
alsa-lib                  1.2.8                h166bdaf_0    conda-forge
altgraph                  0.17.3             pyhd8ed1ab_0    conda-forge
aom                       3.5.0                h27087fc_0    conda-forge
asttokens                 2.2.1              pyhd8ed1ab_0    conda-forge
async-timeout             4.0.2              pyhd8ed1ab_0    conda-forge
attr                      2.5.1                h166bdaf_1    conda-forge
attrs                     23.1.0             pyh71513ae_1    conda-forge
babel                     2.12.1             pyhd8ed1ab_1    conda-forge
backcall                  0.2.0              pyh9f0ad1d_0    conda-forge
backports                 1.0                pyhd8ed1ab_3    conda-forge
backports.functools_lru_cache 1.6.5              pyhd8ed1ab_0    conda-forge
blosc                     1.21.4               h0f2a231_0    conda-forge
boost-cpp                 1.78.0               h5adbc97_2    conda-forge
branca                    0.6.0              pyhd8ed1ab_0    conda-forge
brotli                    1.0.9                h166bdaf_9    conda-forge
brotli-bin                1.0.9                h166bdaf_9    conda-forge
brotli-python             1.0.9            py38hfa26641_9    conda-forge
brunsli                   0.1                  h9c3ff4c_0    conda-forge
bzip2                     1.0.8                h7f98852_4    conda-forge
c-ares                    1.19.1               hd590300_0    conda-forge
c-blosc2                  2.10.0               hb4ffafa_0    conda-forge
ca-certificates           2023.5.7             hbcca054_0    conda-forge
cairo                     1.16.0            ha61ee94_1014    conda-forge
certifi                   2023.5.7           pyhd8ed1ab_0    conda-forge
cfitsio                   4.2.0                hd9d235c_0    conda-forge
charls                    2.4.2                h59595ed_0    conda-forge
charset-normalizer        3.1.0              pyhd8ed1ab_0    conda-forge
click                     8.1.3           unix_pyhd8ed1ab_2    conda-forge
click-plugins             1.1.1                      py_0    conda-forge
cligj                     0.7.2              pyhd8ed1ab_1    conda-forge
cloudpickle               2.2.1              pyhd8ed1ab_0    conda-forge
cmocean                   3.0.3              pyhd8ed1ab_0    conda-forge
colorama                  0.4.6              pyhd8ed1ab_0    conda-forge
colorcet                  3.0.1              pyhd8ed1ab_0    conda-forge
colorspacious             1.1.2              pyh24bf2e0_0    conda-forge
comm                      0.1.3              pyhd8ed1ab_0    conda-forge
contourpy                 1.1.0            py38h7f3f72f_0    conda-forge
curl                      8.1.2                h409715c_0    conda-forge
cycler                    0.11.0             pyhd8ed1ab_0    conda-forge
cytoolz                   0.12.0           py38h0a891b7_1    conda-forge
dask-core                 2023.5.0           pyhd8ed1ab_0    conda-forge
dav1d                     1.2.1                hd590300_0    conda-forge
dbus                      1.13.6               h5008d03_3    conda-forge
debugpy                   1.6.7            py38h8dc9893_0    conda-forge
decorator                 5.1.1              pyhd8ed1ab_0    conda-forge
deprecated                1.2.14             pyh1a96a4e_0    conda-forge
docutils                  0.20.1           py38h578d9bd_0    conda-forge
double-conversion         3.2.0                h27087fc_1    conda-forge
eigen                     3.4.0                h4bd325d_0    conda-forge
et_xmlfile                1.1.0              pyhd8ed1ab_0    conda-forge
exceptiongroup            1.1.2              pyhd8ed1ab_0    conda-forge
executing                 1.2.0              pyhd8ed1ab_0    conda-forge
expat                     2.5.0                hcb278e6_1    conda-forge
ezdxf                     1.0.3            py38hfbd4bf9_0    conda-forge
ffmpeg                    5.1.2           gpl_h8dda1f0_106    conda-forge
fftw                      3.3.10          nompi_hc118613_108    conda-forge
fiona                     1.9.3            py38h3e9d628_0    conda-forge
folium                    0.14.0             pyhd8ed1ab_0    conda-forge
font-ttf-dejavu-sans-mono 2.37                 hab24e00_0    conda-forge
font-ttf-inconsolata      3.000                h77eed37_0    conda-forge
font-ttf-source-code-pro  2.038                h77eed37_0    conda-forge
font-ttf-ubuntu           0.83                 hab24e00_0    conda-forge
fontconfig                2.14.2               h14ed4e7_0    conda-forge
fonts-conda-ecosystem     1                             0    conda-forge
fonts-conda-forge         1                             0    conda-forge
fonttools                 4.40.0           py38h01eb140_0    conda-forge
freetype                  2.12.1               hca18f0e_1    conda-forge
freexl                    1.0.6                h166bdaf_1    conda-forge
frozenlist                1.3.3            py38h0a891b7_0    conda-forge
fsspec                    2023.6.0           pyh1a96a4e_0    conda-forge
gdal                      3.6.3            py38h58634bd_0    conda-forge
geopandas                 0.13.2             pyhd8ed1ab_1    conda-forge
geopandas-base            0.13.2             pyha770c72_1    conda-forge
geos                      3.11.1               h27087fc_0    conda-forge
geotiff                   1.7.1                hb963b44_7    conda-forge
gettext                   0.21.1               h27087fc_0    conda-forge
giflib                    5.2.1                h0b41bf4_3    conda-forge
gl2ps                     1.4.2                h0708190_0    conda-forge
glew                      2.1.0                h9c3ff4c_2    conda-forge
glib                      2.76.3               hfc55251_0    conda-forge
glib-tools                2.76.3               hfc55251_0    conda-forge
gmp                       6.2.1                h58526e2_0    conda-forge
gnutls                    3.7.8                hf3e180e_0    conda-forge
graphite2                 1.3.13            h58526e2_1001    conda-forge
gst-plugins-base          1.22.0               h4243ec0_2    conda-forge
gstreamer                 1.22.0               h25f0c4b_2    conda-forge
gstreamer-orc             0.4.34               hd590300_0    conda-forge
harfbuzz                  6.0.0                h8e241bc_0    conda-forge
hdf4                      4.2.15               h501b40f_6    conda-forge
hdf5                      1.12.2          nompi_h4df4325_101    conda-forge
icu                       70.1                 h27087fc_0    conda-forge
idna                      3.4                pyhd8ed1ab_0    conda-forge
imagecodecs               2023.1.23        py38h478c083_1    conda-forge
imageio                   2.31.1             pyh24c5eb1_0    conda-forge
imagesize                 1.4.1              pyhd8ed1ab_0    conda-forge
importlib-metadata        6.7.0              pyha770c72_0    conda-forge
importlib-resources       5.12.0             pyhd8ed1ab_0    conda-forge
importlib_metadata        6.7.0                hd8ed1ab_0    conda-forge
importlib_resources       5.12.0             pyhd8ed1ab_0    conda-forge
iniconfig                 2.0.0              pyhd8ed1ab_0    conda-forge
ipydatawidgets            4.3.2              pyhc268e32_0    conda-forge
ipykernel                 6.24.0             pyh71e2992_0    conda-forge
ipython                   8.12.2             pyh41d4057_0    conda-forge
ipywidgets                8.0.7              pyhd8ed1ab_0    conda-forge
jack                      1.9.22               h11f4161_0    conda-forge
jedi                      0.18.2             pyhd8ed1ab_0    conda-forge
jinja2                    3.1.2              pyhd8ed1ab_1    conda-forge
joblib                    1.3.0              pyhd8ed1ab_1    conda-forge
json-c                    0.16                 hc379101_0    conda-forge
jsoncpp                   1.9.5                h4bd325d_1    conda-forge
jupyter_client            8.3.0              pyhd8ed1ab_0    conda-forge
jupyter_core              5.3.0            py38h578d9bd_0    conda-forge
jupyterlab_widgets        3.0.8              pyhd8ed1ab_0    conda-forge
jxrlib                    1.1                  h7f98852_2    conda-forge
kealib                    1.5.0                ha7026e8_0    conda-forge
keyutils                  1.6.1                h166bdaf_0    conda-forge
kiwisolver                1.4.4            py38h43d8883_1    conda-forge
krb5                      1.20.1               h81ceb04_0    conda-forge
lame                      3.100             h166bdaf_1003    conda-forge
laspy                     2.3.0              pyha21a80b_0    conda-forge
lazy_loader               0.2                pyhd8ed1ab_0    conda-forge
lcms2                     2.15                 haa2dc70_1    conda-forge
ld_impl_linux-64          2.40                 h41732ed_0    conda-forge
lerc                      4.0.0                h27087fc_0    conda-forge
libaec                    1.0.6                hcb278e6_1    conda-forge
libavif                   0.11.1               h8182462_2    conda-forge
libblas                   3.9.0           17_linux64_openblas    conda-forge
libbrotlicommon           1.0.9                h166bdaf_9    conda-forge
libbrotlidec              1.0.9                h166bdaf_9    conda-forge
libbrotlienc              1.0.9                h166bdaf_9    conda-forge
libcap                    2.67                 he9d0100_0    conda-forge
libcblas                  3.9.0           17_linux64_openblas    conda-forge
libclang                  15.0.7          default_h7634d5b_2    conda-forge
libclang13                15.0.7          default_h9986a30_2    conda-forge
libcups                   2.3.3                h36d4200_3    conda-forge
libcurl                   8.1.2                h409715c_0    conda-forge
libdb                     6.2.32               h9c3ff4c_0    conda-forge
libdeflate                1.17                 h0b41bf4_0    conda-forge
libdrm                    2.4.114              h166bdaf_0    conda-forge
libedit                   3.1.20191231         he28a2e2_2    conda-forge
libev                     4.33                 h516909a_1    conda-forge
libevent                  2.1.10               h28343ad_4    conda-forge
libexpat                  2.5.0                hcb278e6_1    conda-forge
libffi                    3.4.2                h7f98852_5    conda-forge
libflac                   1.4.3                h59595ed_0    conda-forge
libgcc-ng                 13.1.0               he5830b7_0    conda-forge
libgcrypt                 1.10.1               h166bdaf_0    conda-forge
libgdal                   3.6.3                hb7af45b_0    conda-forge
libgfortran-ng            13.1.0               h69a702a_0    conda-forge
libgfortran5              13.1.0               h15d22d2_0    conda-forge
libglib                   2.76.3               hebfc3b9_0    conda-forge
libglu                    9.0.0             he1b5a44_1001    conda-forge
libgomp                   13.1.0               he5830b7_0    conda-forge
libgpg-error              1.47                 h71f35ed_0    conda-forge
libhwloc                  2.9.1                hd6dc26d_0    conda-forge
libiconv                  1.17                 h166bdaf_0    conda-forge
libidn2                   2.3.4                h166bdaf_0    conda-forge
libjpeg-turbo             2.1.5.1              h0b41bf4_0    conda-forge
libkml                    1.3.0             h37653c0_1015    conda-forge
liblapack                 3.9.0           17_linux64_openblas    conda-forge
libllvm15                 15.0.7               hadd5161_1    conda-forge
libnetcdf                 4.9.1           nompi_hd2e9713_102    conda-forge
libnghttp2                1.52.0               h61bc06f_0    conda-forge
libnsl                    2.0.0                h7f98852_0    conda-forge
libogg                    1.3.4                h7f98852_1    conda-forge
libopenblas               0.3.23          pthreads_h80387f5_0    conda-forge
libopus                   1.3.1                h7f98852_1    conda-forge
libpciaccess              0.17                 h166bdaf_0    conda-forge
libpng                    1.6.39               h753d276_0    conda-forge
libpq                     15.2                 hb675445_0    conda-forge
librttopo                 1.1.0               ha49c73b_12    conda-forge
libsndfile                1.2.0                hb75c966_0    conda-forge
libsodium                 1.0.18               h36c2ea0_1    conda-forge
libspatialindex           1.9.3                h9c3ff4c_4    conda-forge
libspatialite             5.0.1               h221c8f1_23    conda-forge
libsqlite                 3.42.0               h2797004_0    conda-forge
libssh2                   1.11.0               h0841786_0    conda-forge
libstdcxx-ng              13.1.0               hfd8a6a1_0    conda-forge
libsystemd0               253                  h8c4010b_1    conda-forge
libtasn1                  4.19.0               h166bdaf_0    conda-forge
libtheora                 1.1.1             h7f98852_1005    conda-forge
libtiff                   4.5.0                hddfeb54_5    conda-forge
libtool                   2.4.7                h27087fc_0    conda-forge
libudev1                  253                  h0b41bf4_1    conda-forge
libunistring              0.9.10               h7f98852_0    conda-forge
libuuid                   2.38.1               h0b41bf4_0    conda-forge
libva                     2.18.0               h0b41bf4_0    conda-forge
libvorbis                 1.3.7                h9c3ff4c_0    conda-forge
libvpx                    1.11.0               h9c3ff4c_3    conda-forge
libwebp-base              1.3.1                hd590300_0    conda-forge
libxcb                    1.13              h7f98852_1004    conda-forge
libxkbcommon              1.5.0                h79f4944_1    conda-forge
libxml2                   2.10.3               hca2bb57_4    conda-forge
libxslt                   1.1.37               h873f0b0_0    conda-forge
libzip                    1.9.2                hc929e4a_1    conda-forge
libzlib                   1.2.13               hd590300_5    conda-forge
libzopfli                 1.0.3                h9c3ff4c_0    conda-forge
locket                    1.0.0              pyhd8ed1ab_0    conda-forge
loguru                    0.7.0            py38h578d9bd_0    conda-forge
loopstructural            v1.5.10          py38h8c27c75_0    loop3d
lxml                      4.9.2            py38h215a2d7_0    conda-forge
lz4-c                     1.9.4                hcb278e6_0    conda-forge
macholib                  1.16.2             pyhd8ed1ab_0    conda-forge
mapclassify               2.5.0              pyhd8ed1ab_1    conda-forge
markupsafe                2.1.3            py38h01eb140_0    conda-forge
matplotlib-base           3.7.1            py38hd6c3c57_0    conda-forge
matplotlib-inline         0.1.6              pyhd8ed1ab_0    conda-forge
mpg123                    1.31.3               hcb278e6_0    conda-forge
mplstereonet              0.6.2              pyhd8ed1ab_0    conda-forge
multidict                 6.0.4            py38h1de0b5d_0    conda-forge
munch                     4.0.0              pyhd8ed1ab_0    conda-forge
munkres                   1.1.4              pyh9f0ad1d_0    conda-forge
mysql-common              8.0.33               hf1915f5_1    conda-forge
mysql-libs                8.0.33               hca2cd23_1    conda-forge
ncurses                   6.4                  hcb278e6_0    conda-forge
nest-asyncio              1.5.6              pyhd8ed1ab_0    conda-forge
nettle                    3.8.1                hc379101_1    conda-forge
networkx                  3.1                pyhd8ed1ab_0    conda-forge
nlohmann_json             3.11.2               h27087fc_0    conda-forge
nspr                      4.35                 h27087fc_0    conda-forge
nss                       3.89                 he45b914_0    conda-forge
numpy                     1.24.4           py38h59b608b_0    conda-forge
openh264                  2.3.1                hcb278e6_2    conda-forge
openjpeg                  2.5.0                hfec8fc6_2    conda-forge
openpyxl                  3.1.2            py38h01eb140_0    conda-forge
openssl                   3.1.1                hd590300_1    conda-forge
p11-kit                   0.24.1               hc5aa10d_0    conda-forge
packaging                 23.1               pyhd8ed1ab_0    conda-forge
pandas                    1.5.3            py38hdc8b05c_1    conda-forge
param                     1.13.0             pyh1a96a4e_0    conda-forge
parso                     0.8.3              pyhd8ed1ab_0    conda-forge
partd                     1.4.0              pyhd8ed1ab_0    conda-forge
patsy                     0.5.3              pyhd8ed1ab_0    conda-forge
pcre2                     10.40                hc3806b6_0    conda-forge
pexpect                   4.8.0              pyh1a96a4e_2    conda-forge
pickleshare               0.7.5                   py_1003    conda-forge
pillow                    9.5.0            py38h961100d_0    conda-forge
pip                       23.1.2             pyhd8ed1ab_0    conda-forge
pixman                    0.40.0               h36c2ea0_0    conda-forge
platformdirs              3.8.0              pyhd8ed1ab_0    conda-forge
pluggy                    1.2.0              pyhd8ed1ab_0    conda-forge
ply                       3.11                       py_1    conda-forge
pooch                     1.7.0              pyha770c72_3    conda-forge
poppler                   23.03.0              hf052cbe_1    conda-forge
poppler-data              0.4.12               hd8ed1ab_0    conda-forge
postgresql                15.2                 h3248436_0    conda-forge
proj                      9.1.1                h8ffa02c_2    conda-forge
prompt-toolkit            3.0.39             pyha770c72_0    conda-forge
prompt_toolkit            3.0.39               hd8ed1ab_0    conda-forge
psutil                    5.9.5            py38h1de0b5d_0    conda-forge
pthread-stubs             0.4               h36c2ea0_1001    conda-forge
ptyprocess                0.7.0              pyhd3deb0d_0    conda-forge
pugixml                   1.11.4               h59595ed_1    conda-forge
pulseaudio                16.1                 hcb278e6_3    conda-forge
pulseaudio-client         16.1                 h5195f5e_3    conda-forge
pulseaudio-daemon         16.1                 ha8d29e2_3    conda-forge
pure_eval                 0.2.2              pyhd8ed1ab_0    conda-forge
pyct                      0.4.6                      py_0    conda-forge
pyct-core                 0.4.6                      py_0    conda-forge
pygments                  2.15.1             pyhd8ed1ab_0    conda-forge
pyinstaller               5.13.0           py38h502143a_0    conda-forge
pyinstaller-hooks-contrib 2023.5             pyhd8ed1ab_0    conda-forge
pyparsing                 3.1.0              pyhd8ed1ab_0    conda-forge
pyproj                    3.5.0            py38h8bbf91b_0    conda-forge
pyqt                      5.15.7           py38ha0d8c90_3    conda-forge
pyqt5-sip                 12.11.0          py38h8dc9893_3    conda-forge
pysocks                   1.7.1              pyha2e5f31_6    conda-forge
pytest                    7.4.0              pyhd8ed1ab_0    conda-forge
python                    3.8.17          he550d4f_0_cpython    conda-forge
python-dateutil           2.8.2              pyhd8ed1ab_0    conda-forge
python_abi                3.8                      3_cp38    conda-forge
pythreejs                 2.4.2              pyh1d7be83_0    conda-forge
pytz                      2023.3             pyhd8ed1ab_0    conda-forge
pyvista                   0.40.0             pyhd8ed1ab_0    conda-forge
pyvistaqt                 0.11.0             pyhd8ed1ab_0    conda-forge
pywavelets                1.4.1            py38h7e4f40d_0    conda-forge
pyyaml                    6.0              py38h0a891b7_5    conda-forge
pyzmq                     25.1.0           py38h509eb50_0    conda-forge
qt-main                   5.15.8               h67dfc38_7    conda-forge
qtpy                      2.3.1              pyhd8ed1ab_0    conda-forge
rasterio                  1.3.6            py38hf839189_0    conda-forge
readline                  8.2                  h8228510_1    conda-forge
requests                  2.31.0             pyhd8ed1ab_0    conda-forge
rtree                     1.0.1            py38h02d302b_1    conda-forge
scikit-image              0.20.0           py38hf403d1e_1    conda-forge
scikit-learn              1.3.0            py38hc099248_0    conda-forge
scipy                     1.9.1            py38hea3f02b_0    conda-forge
scooby                    0.7.2              pyhd8ed1ab_0    conda-forge
seaborn                   0.12.2               hd8ed1ab_0    conda-forge
seaborn-base              0.12.2             pyhd8ed1ab_0    conda-forge
setuptools                68.0.0             pyhd8ed1ab_0    conda-forge
shapely                   1.8.5            py38hafd38ec_2    conda-forge
sip                       6.7.9            py38h17151c0_0    conda-forge
six                       1.16.0             pyh6c4a22f_0    conda-forge
snappy                    1.1.10               h9fff704_0    conda-forge
snowballstemmer           2.2.0              pyhd8ed1ab_0    conda-forge
snuggs                    1.4.7                      py_0    conda-forge
sphinx                    7.0.1              pyhd8ed1ab_0    conda-forge
sphinx_rtd_theme          0.4.3              pyhd3eb1b0_0  
sphinxcontrib-applehelp   1.0.4              pyhd8ed1ab_0    conda-forge
sphinxcontrib-devhelp     1.0.2                      py_0    conda-forge
sphinxcontrib-htmlhelp    2.0.1              pyhd8ed1ab_0    conda-forge
sphinxcontrib-jsmath      1.0.1                      py_0    conda-forge
sphinxcontrib-qthelp      1.0.3                      py_0    conda-forge
sphinxcontrib-serializinghtml 1.1.5              pyhd8ed1ab_2    conda-forge
sqlite                    3.42.0               h2c6b66d_0    conda-forge
stack_data                0.6.2              pyhd8ed1ab_0    conda-forge
statsmodels               0.14.0           py38h31356c5_1    conda-forge
svt-av1                   1.4.1                hcb278e6_0    conda-forge
tbb                       2021.9.0             hf52228f_0    conda-forge
tbb-devel                 2021.9.0             hf52228f_0    conda-forge
threadpoolctl             3.1.0              pyh8a188c0_0    conda-forge
tifffile                  2023.7.4           pyhd8ed1ab_0    conda-forge
tiledb                    2.13.2               hd532e3d_0    conda-forge
tk                        8.6.12               h27826a3_0    conda-forge
toml                      0.10.2             pyhd8ed1ab_0    conda-forge
tomli                     2.0.1              pyhd8ed1ab_0    conda-forge
toolz                     0.12.0             pyhd8ed1ab_0    conda-forge
tornado                   6.3.2            py38h01eb140_0    conda-forge
tqdm                      4.65.0             pyhd8ed1ab_1    conda-forge
traitlets                 5.9.0              pyhd8ed1ab_0    conda-forge
traittypes                0.2.1              pyh9f0ad1d_2    conda-forge
typing-extensions         4.7.1                hd8ed1ab_0    conda-forge
typing_extensions         4.7.1              pyha770c72_0    conda-forge
tzcode                    2023c                h0b41bf4_0    conda-forge
tzdata                    2023c                h71feb2d_0    conda-forge
unicodedata2              15.0.0           py38h0a891b7_0    conda-forge
urllib3                   2.0.3              pyhd8ed1ab_1    conda-forge
utfcpp                    3.2.3                ha770c72_0    conda-forge
vedo                      2023.4.6           pyhd8ed1ab_0    conda-forge
vtk                       9.2.6           qt_py38h20cb935_201    conda-forge
wcwidth                   0.2.6              pyhd8ed1ab_0    conda-forge
wheel                     0.40.0             pyhd8ed1ab_0    conda-forge
widgetsnbextension        4.0.8              pyhd8ed1ab_0    conda-forge
wrapt                     1.15.0           py38h1de0b5d_0    conda-forge
wslink                    1.11.1             pyhd8ed1ab_0    conda-forge
x264                      1!164.3095           h166bdaf_2    conda-forge
x265                      3.5                  h924138e_3    conda-forge
xarray                    2023.1.0           pyhd8ed1ab_0    conda-forge
xcb-util                  0.4.0                h516909a_0    conda-forge
xcb-util-image            0.4.0                h166bdaf_0    conda-forge
xcb-util-keysyms          0.4.0                h516909a_0    conda-forge
xcb-util-renderutil       0.3.9                h166bdaf_0    conda-forge
xcb-util-wm               0.4.1                h516909a_0    conda-forge
xerces-c                  3.2.4                h55805fa_1    conda-forge
xkeyboard-config          2.38                 h0b41bf4_0    conda-forge
xorg-fixesproto           5.0               h7f98852_1002    conda-forge
xorg-kbproto              1.0.7             h7f98852_1002    conda-forge
xorg-libice               1.0.10               h7f98852_0    conda-forge
xorg-libsm                1.2.3             hd9c2040_1000    conda-forge
xorg-libx11               1.8.4                h0b41bf4_0    conda-forge
xorg-libxau               1.0.11               hd590300_0    conda-forge
xorg-libxdmcp             1.1.3                h7f98852_0    conda-forge
xorg-libxext              1.3.4                h0b41bf4_2    conda-forge
xorg-libxfixes            5.0.3             h7f98852_1004    conda-forge
xorg-libxrender           0.9.10            h7f98852_1003    conda-forge
xorg-libxt                1.3.0                hd590300_0    conda-forge
xorg-renderproto          0.11.1            h7f98852_1002    conda-forge
xorg-xextproto            7.3.0             h0b41bf4_1003    conda-forge
xorg-xf86vidmodeproto     2.3.1             h7f98852_1002    conda-forge
xorg-xproto               7.0.31            h7f98852_1007    conda-forge
xyzservices               2023.5.0           pyhd8ed1ab_1    conda-forge
xz                        5.2.6                h166bdaf_0    conda-forge
yaml                      0.2.5                h7f98852_2    conda-forge
yarl                      1.9.2            py38h01eb140_0    conda-forge
zeromq                    4.3.4                h9c3ff4c_1    conda-forge
zfp                       1.0.0                h27087fc_3    conda-forge
zipp                      3.15.0             pyhd8ed1ab_0    conda-forge
zlib                      1.2.13               hd590300_5    conda-forge
zlib-ng                   2.0.7                h0b41bf4_0    conda-forge
zstd                      1.5.2                h3eb15da_6    conda-forge
```
pzero_test (modified env)
# packages in environment at /home/gabriele/miniconda3/envs/pzero_test:
#
# Name                    Version                   Build  Channel
_libgcc_mutex             0.1                 conda_forge    conda-forge
_openmp_mutex             4.5                       2_gnu    conda-forge
affine                    2.4.0              pyhd8ed1ab_0    conda-forge
aiohttp                   3.8.4            py38h01eb140_1    conda-forge
aiosignal                 1.3.1              pyhd8ed1ab_0    conda-forge
alabaster                 0.7.13             pyhd8ed1ab_0    conda-forge
alsa-lib                  1.2.8                h166bdaf_0    conda-forge
altgraph                  0.17.3             pyhd8ed1ab_0    conda-forge
aom                       3.5.0                h27087fc_0    conda-forge
asttokens                 2.2.1              pyhd8ed1ab_0    conda-forge
async-timeout             4.0.2              pyhd8ed1ab_0    conda-forge
attr                      2.5.1                h166bdaf_1    conda-forge
attrs                     23.1.0             pyh71513ae_1    conda-forge
babel                     2.12.1             pyhd8ed1ab_1    conda-forge
backcall                  0.2.0              pyh9f0ad1d_0    conda-forge
backports                 1.0                pyhd8ed1ab_3    conda-forge
backports.functools_lru_cache 1.6.5              pyhd8ed1ab_0    conda-forge
blosc                     1.21.4               h0f2a231_0    conda-forge
boost-cpp                 1.78.0               h5adbc97_2    conda-forge
branca                    0.6.0              pyhd8ed1ab_0    conda-forge
brotli                    1.0.9                h166bdaf_9    conda-forge
brotli-bin                1.0.9                h166bdaf_9    conda-forge
brotli-python             1.0.9            py38hfa26641_9    conda-forge
brunsli                   0.1                  h9c3ff4c_0    conda-forge
bzip2                     1.0.8                h7f98852_4    conda-forge
c-ares                    1.19.1               hd590300_0    conda-forge
c-blosc2                  2.10.0               hb4ffafa_0    conda-forge
ca-certificates           2023.5.7             hbcca054_0    conda-forge
cairo                     1.16.0            ha61ee94_1014    conda-forge
certifi                   2023.5.7           pyhd8ed1ab_0    conda-forge
cfitsio                   4.2.0                hd9d235c_0    conda-forge
charls                    2.4.2                h59595ed_0    conda-forge
charset-normalizer        3.1.0              pyhd8ed1ab_0    conda-forge
click                     8.1.3           unix_pyhd8ed1ab_2    conda-forge
click-plugins             1.1.1                      py_0    conda-forge
cligj                     0.7.2              pyhd8ed1ab_1    conda-forge
cloudpickle               2.2.1              pyhd8ed1ab_0    conda-forge
cmocean                   3.0.3              pyhd8ed1ab_0    conda-forge
colorama                  0.4.6              pyhd8ed1ab_0    conda-forge
colorcet                  3.0.1              pyhd8ed1ab_0    conda-forge
colorspacious             1.1.2              pyh24bf2e0_0    conda-forge
comm                      0.1.3              pyhd8ed1ab_0    conda-forge
contourpy                 1.1.0            py38h7f3f72f_0    conda-forge
curl                      8.1.2                h409715c_0    conda-forge
cycler                    0.11.0             pyhd8ed1ab_0    conda-forge
cytoolz                   0.12.0           py38h0a891b7_1    conda-forge
dask-core                 2023.5.0           pyhd8ed1ab_0    conda-forge
dav1d                     1.2.1                hd590300_0    conda-forge
dbus                      1.13.6               h5008d03_3    conda-forge
debugpy                   1.6.7            py38h8dc9893_0    conda-forge
decorator                 5.1.1              pyhd8ed1ab_0    conda-forge
deprecated                1.2.14             pyh1a96a4e_0    conda-forge
docutils                  0.20.1           py38h578d9bd_0    conda-forge
double-conversion         3.2.0                h27087fc_1    conda-forge
eigen                     3.4.0                h4bd325d_0    conda-forge
et_xmlfile                1.1.0              pyhd8ed1ab_0    conda-forge
exceptiongroup            1.1.2              pyhd8ed1ab_0    conda-forge
executing                 1.2.0              pyhd8ed1ab_0    conda-forge
expat                     2.5.0                hcb278e6_1    conda-forge
ezdxf                     1.0.3            py38hfbd4bf9_0    conda-forge
ffmpeg                    5.1.2           gpl_h8dda1f0_106    conda-forge
fftw                      3.3.10          nompi_hc118613_108    conda-forge
fiona                     1.9.3            py38h3e9d628_0    conda-forge
folium                    0.14.0             pyhd8ed1ab_0    conda-forge
font-ttf-dejavu-sans-mono 2.37                 hab24e00_0    conda-forge
font-ttf-inconsolata      3.000                h77eed37_0    conda-forge
font-ttf-source-code-pro  2.038                h77eed37_0    conda-forge
font-ttf-ubuntu           0.83                 hab24e00_0    conda-forge
fontconfig                2.14.2               h14ed4e7_0    conda-forge
fonts-conda-ecosystem     1                             0    conda-forge
fonts-conda-forge         1                             0    conda-forge
fonttools                 4.40.0           py38h01eb140_0    conda-forge
freetype                  2.12.1               hca18f0e_1    conda-forge
freexl                    1.0.6                h166bdaf_1    conda-forge
frozenlist                1.3.3            py38h0a891b7_0    conda-forge
fsspec                    2023.6.0           pyh1a96a4e_0    conda-forge
gdal                      3.6.3            py38h58634bd_0    conda-forge
geopandas                 0.13.2             pyhd8ed1ab_1    conda-forge
geopandas-base            0.13.2             pyha770c72_1    conda-forge
geos                      3.11.1               h27087fc_0    conda-forge
geotiff                   1.7.1                hb963b44_7    conda-forge
gettext                   0.21.1               h27087fc_0    conda-forge
giflib                    5.2.1                h0b41bf4_3    conda-forge
gl2ps                     1.4.2                h0708190_0    conda-forge
glew                      2.1.0                h9c3ff4c_2    conda-forge
glib                      2.76.3               hfc55251_0    conda-forge
glib-tools                2.76.3               hfc55251_0    conda-forge
gmp                       6.2.1                h58526e2_0    conda-forge
gnutls                    3.7.8                hf3e180e_0    conda-forge
graphite2                 1.3.13            h58526e2_1001    conda-forge
gst-plugins-base          1.22.0               h4243ec0_2    conda-forge
gstreamer                 1.22.0               h25f0c4b_2    conda-forge
gstreamer-orc             0.4.34               hd590300_0    conda-forge
harfbuzz                  6.0.0                h8e241bc_0    conda-forge
hdf4                      4.2.15               h501b40f_6    conda-forge
hdf5                      1.12.2          nompi_h4df4325_101    conda-forge
icu                       70.1                 h27087fc_0    conda-forge
idna                      3.4                pyhd8ed1ab_0    conda-forge
imagecodecs               2023.1.23        py38h478c083_1    conda-forge
imageio                   2.31.1             pyh24c5eb1_0    conda-forge
imagesize                 1.4.1              pyhd8ed1ab_0    conda-forge
importlib-metadata        6.7.0              pyha770c72_0    conda-forge
importlib-resources       5.12.0             pyhd8ed1ab_0    conda-forge
importlib_metadata        6.7.0                hd8ed1ab_0    conda-forge
importlib_resources       5.12.0             pyhd8ed1ab_0    conda-forge
iniconfig                 2.0.0              pyhd8ed1ab_0    conda-forge
ipydatawidgets            4.3.2              pyhc268e32_0    conda-forge
ipykernel                 6.24.0             pyh71e2992_0    conda-forge
ipython                   8.12.2             pyh41d4057_0    conda-forge
ipywidgets                8.0.7              pyhd8ed1ab_0    conda-forge
jack                      1.9.22               h11f4161_0    conda-forge
jedi                      0.18.2             pyhd8ed1ab_0    conda-forge
jinja2                    3.1.2              pyhd8ed1ab_1    conda-forge
joblib                    1.3.0              pyhd8ed1ab_1    conda-forge
json-c                    0.16                 hc379101_0    conda-forge
jsoncpp                   1.9.5                h4bd325d_1    conda-forge
jupyter_client            8.3.0              pyhd8ed1ab_0    conda-forge
jupyter_core              5.3.0            py38h578d9bd_0    conda-forge
jupyterlab_widgets        3.0.8              pyhd8ed1ab_0    conda-forge
jxrlib                    1.1                  h7f98852_2    conda-forge
kealib                    1.5.0                ha7026e8_0    conda-forge
keyutils                  1.6.1                h166bdaf_0    conda-forge
kiwisolver                1.4.4            py38h43d8883_1    conda-forge
krb5                      1.20.1               h81ceb04_0    conda-forge
lame                      3.100             h166bdaf_1003    conda-forge
laspy                     2.3.0              pyha21a80b_0    conda-forge
lazy_loader               0.2                pyhd8ed1ab_0    conda-forge
lcms2                     2.15                 haa2dc70_1    conda-forge
ld_impl_linux-64          2.40                 h41732ed_0    conda-forge
lerc                      4.0.0                h27087fc_0    conda-forge
libaec                    1.0.6                hcb278e6_1    conda-forge
libavif                   0.11.1               h8182462_2    conda-forge
libblas                   3.9.0           17_linux64_openblas    conda-forge
libbrotlicommon           1.0.9                h166bdaf_9    conda-forge
libbrotlidec              1.0.9                h166bdaf_9    conda-forge
libbrotlienc              1.0.9                h166bdaf_9    conda-forge
libcap                    2.67                 he9d0100_0    conda-forge
libcblas                  3.9.0           17_linux64_openblas    conda-forge
libclang                  15.0.7          default_h7634d5b_2    conda-forge
libclang13                15.0.7          default_h9986a30_2    conda-forge
libcups                   2.3.3                h36d4200_3    conda-forge
libcurl                   8.1.2                h409715c_0    conda-forge
libdb                     6.2.32               h9c3ff4c_0    conda-forge
libdeflate                1.17                 h0b41bf4_0    conda-forge
libdrm                    2.4.114              h166bdaf_0    conda-forge
libedit                   3.1.20191231         he28a2e2_2    conda-forge
libev                     4.33                 h516909a_1    conda-forge
libevent                  2.1.10               h28343ad_4    conda-forge
libexpat                  2.5.0                hcb278e6_1    conda-forge
libffi                    3.4.2                h7f98852_5    conda-forge
libflac                   1.4.3                h59595ed_0    conda-forge
libgcc-ng                 13.1.0               he5830b7_0    conda-forge
libgcrypt                 1.10.1               h166bdaf_0    conda-forge
libgdal                   3.6.3                hb7af45b_0    conda-forge
libgfortran-ng            13.1.0               h69a702a_0    conda-forge
libgfortran5              13.1.0               h15d22d2_0    conda-forge
libglib                   2.76.3               hebfc3b9_0    conda-forge
libglu                    9.0.0             he1b5a44_1001    conda-forge
libgomp                   13.1.0               he5830b7_0    conda-forge
libgpg-error              1.47                 h71f35ed_0    conda-forge
libhwloc                  2.9.1                hd6dc26d_0    conda-forge
libiconv                  1.17                 h166bdaf_0    conda-forge
libidn2                   2.3.4                h166bdaf_0    conda-forge
libjpeg-turbo             2.1.5.1              h0b41bf4_0    conda-forge
libkml                    1.3.0             h37653c0_1015    conda-forge
liblapack                 3.9.0           17_linux64_openblas    conda-forge
libllvm15                 15.0.7               hadd5161_1    conda-forge
libnetcdf                 4.9.1           nompi_hd2e9713_102    conda-forge
libnghttp2                1.52.0               h61bc06f_0    conda-forge
libnsl                    2.0.0                h7f98852_0    conda-forge
libogg                    1.3.4                h7f98852_1    conda-forge
libopenblas               0.3.23          pthreads_h80387f5_0    conda-forge
libopus                   1.3.1                h7f98852_1    conda-forge
libpciaccess              0.17                 h166bdaf_0    conda-forge
libpng                    1.6.39               h753d276_0    conda-forge
libpq                     15.2                 hb675445_0    conda-forge
librttopo                 1.1.0               ha49c73b_12    conda-forge
libsndfile                1.2.0                hb75c966_0    conda-forge
libsodium                 1.0.18               h36c2ea0_1    conda-forge
libspatialindex           1.9.3                h9c3ff4c_4    conda-forge
libspatialite             5.0.1               h221c8f1_23    conda-forge
libsqlite                 3.42.0               h2797004_0    conda-forge
libssh2                   1.11.0               h0841786_0    conda-forge
libstdcxx-ng              13.1.0               hfd8a6a1_0    conda-forge
libsystemd0               253                  h8c4010b_1    conda-forge
libtasn1                  4.19.0               h166bdaf_0    conda-forge
libtheora                 1.1.1             h7f98852_1005    conda-forge
libtiff                   4.5.0                hddfeb54_5    conda-forge
libtool                   2.4.7                h27087fc_0    conda-forge
libudev1                  253                  h0b41bf4_1    conda-forge
libunistring              0.9.10               h7f98852_0    conda-forge
libuuid                   2.38.1               h0b41bf4_0    conda-forge
libva                     2.18.0               h0b41bf4_0    conda-forge
libvorbis                 1.3.7                h9c3ff4c_0    conda-forge
libvpx                    1.11.0               h9c3ff4c_3    conda-forge
libwebp-base              1.3.1                hd590300_0    conda-forge
libxcb                    1.13              h7f98852_1004    conda-forge
libxkbcommon              1.5.0                h79f4944_1    conda-forge
libxml2                   2.10.3               hca2bb57_4    conda-forge
libxslt                   1.1.37               h873f0b0_0    conda-forge
libzip                    1.9.2                hc929e4a_1    conda-forge
libzlib                   1.2.13               hd590300_5    conda-forge
libzopfli                 1.0.3                h9c3ff4c_0    conda-forge
locket                    1.0.0              pyhd8ed1ab_0    conda-forge
loguru                    0.7.0            py38h578d9bd_0    conda-forge
loopstructural            v1.5.10          py38h8c27c75_0    loop3d
lxml                      4.9.2            py38h215a2d7_0    conda-forge
lz4-c                     1.9.4                hcb278e6_0    conda-forge
macholib                  1.16.2             pyhd8ed1ab_0    conda-forge
mapclassify               2.5.0              pyhd8ed1ab_1    conda-forge
markupsafe                2.1.3            py38h01eb140_0    conda-forge
matplotlib-base           3.7.1            py38hd6c3c57_0    conda-forge
matplotlib-inline         0.1.6              pyhd8ed1ab_0    conda-forge
mpg123                    1.31.3               hcb278e6_0    conda-forge
mplstereonet              0.6.2              pyhd8ed1ab_0    conda-forge
multidict                 6.0.4            py38h1de0b5d_0    conda-forge
munch                     4.0.0              pyhd8ed1ab_0    conda-forge
munkres                   1.1.4              pyh9f0ad1d_0    conda-forge
mysql-common              8.0.33               hf1915f5_1    conda-forge
mysql-libs                8.0.33               hca2cd23_1    conda-forge
ncurses                   6.4                  hcb278e6_0    conda-forge
nest-asyncio              1.5.6              pyhd8ed1ab_0    conda-forge
nettle                    3.8.1                hc379101_1    conda-forge
networkx                  3.1                pyhd8ed1ab_0    conda-forge
nlohmann_json             3.11.2               h27087fc_0    conda-forge
nspr                      4.35                 h27087fc_0    conda-forge
nss                       3.89                 he45b914_0    conda-forge
numpy                     1.24.4           py38h59b608b_0    conda-forge
openh264                  2.3.1                hcb278e6_2    conda-forge
openjpeg                  2.5.0                hfec8fc6_2    conda-forge
openpyxl                  3.1.2            py38h01eb140_0    conda-forge
openssl                   3.1.1                hd590300_1    conda-forge
p11-kit                   0.24.1               hc5aa10d_0    conda-forge
packaging                 23.1               pyhd8ed1ab_0    conda-forge
pandas                    1.5.3            py38hdc8b05c_1    conda-forge
param                     1.13.0             pyh1a96a4e_0    conda-forge
parso                     0.8.3              pyhd8ed1ab_0    conda-forge
partd                     1.4.0              pyhd8ed1ab_0    conda-forge
patsy                     0.5.3              pyhd8ed1ab_0    conda-forge
pcre2                     10.40                hc3806b6_0    conda-forge
pexpect                   4.8.0              pyh1a96a4e_2    conda-forge
pickleshare               0.7.5                   py_1003    conda-forge
pillow                    9.5.0            py38h961100d_0    conda-forge
pip                       23.1.2             pyhd8ed1ab_0    conda-forge
pixman                    0.40.0               h36c2ea0_0    conda-forge
platformdirs              3.8.0              pyhd8ed1ab_0    conda-forge
pluggy                    1.2.0              pyhd8ed1ab_0    conda-forge
pooch                     1.7.0              pyha770c72_3    conda-forge
poppler                   23.03.0              hf052cbe_1    conda-forge
poppler-data              0.4.12               hd8ed1ab_0    conda-forge
postgresql                15.2                 h3248436_0    conda-forge
proj                      9.1.1                h8ffa02c_2    conda-forge
prompt-toolkit            3.0.39             pyha770c72_0    conda-forge
prompt_toolkit            3.0.39               hd8ed1ab_0    conda-forge
psutil                    5.9.5            py38h1de0b5d_0    conda-forge
pthread-stubs             0.4               h36c2ea0_1001    conda-forge
ptyprocess                0.7.0              pyhd3deb0d_0    conda-forge
pugixml                   1.11.4               h59595ed_1    conda-forge
pulseaudio                16.1                 hcb278e6_3    conda-forge
pulseaudio-client         16.1                 h5195f5e_3    conda-forge
pulseaudio-daemon         16.1                 ha8d29e2_3    conda-forge
pure_eval                 0.2.2              pyhd8ed1ab_0    conda-forge
pyct                      0.4.6                      py_0    conda-forge
pyct-core                 0.4.6                      py_0    conda-forge
pygments                  2.15.1             pyhd8ed1ab_0    conda-forge
pyinstaller               5.13.0           py38h502143a_0    conda-forge
pyinstaller-hooks-contrib 2023.5             pyhd8ed1ab_0    conda-forge
pyparsing                 3.1.0              pyhd8ed1ab_0    conda-forge
pyproj                    3.5.0            py38h8bbf91b_0    conda-forge
pyqt5                     5.15.9                   pypi_0    pypi
pyqt5-qt5                 5.15.2                   pypi_0    pypi
pyqt5-sip                 12.12.1                  pypi_0    pypi
pysocks                   1.7.1              pyha2e5f31_6    conda-forge
pytest                    7.4.0              pyhd8ed1ab_0    conda-forge
python                    3.8.17          he550d4f_0_cpython    conda-forge
python-dateutil           2.8.2              pyhd8ed1ab_0    conda-forge
python_abi                3.8                      3_cp38    conda-forge
pythreejs                 2.4.2              pyh1d7be83_0    conda-forge
pytz                      2023.3             pyhd8ed1ab_0    conda-forge
pyvista                   0.40.0             pyhd8ed1ab_0    conda-forge
pyvistaqt                 0.11.0             pyhd8ed1ab_0    conda-forge
pywavelets                1.4.1            py38h7e4f40d_0    conda-forge
pyyaml                    6.0              py38h0a891b7_5    conda-forge
pyzmq                     25.1.0           py38h509eb50_0    conda-forge
qt-main                   5.15.8               h67dfc38_7    conda-forge
qtpy                      2.3.1              pyhd8ed1ab_0    conda-forge
rasterio                  1.3.6            py38hf839189_0    conda-forge
readline                  8.2                  h8228510_1    conda-forge
requests                  2.31.0             pyhd8ed1ab_0    conda-forge
rtree                     1.0.1            py38h02d302b_1    conda-forge
scikit-image              0.20.0           py38hf403d1e_1    conda-forge
scikit-learn              1.3.0            py38hc099248_0    conda-forge
scipy                     1.9.1            py38hea3f02b_0    conda-forge
scooby                    0.7.2              pyhd8ed1ab_0    conda-forge
seaborn                   0.12.2               hd8ed1ab_0    conda-forge
seaborn-base              0.12.2             pyhd8ed1ab_0    conda-forge
setuptools                68.0.0             pyhd8ed1ab_0    conda-forge
shapely                   1.8.5            py38hafd38ec_2    conda-forge
six                       1.16.0             pyh6c4a22f_0    conda-forge
snappy                    1.1.10               h9fff704_0    conda-forge
snowballstemmer           2.2.0              pyhd8ed1ab_0    conda-forge
snuggs                    1.4.7                      py_0    conda-forge
sphinx                    7.0.1              pyhd8ed1ab_0    conda-forge
sphinx_rtd_theme          0.4.3              pyhd3eb1b0_0  
sphinxcontrib-applehelp   1.0.4              pyhd8ed1ab_0    conda-forge
sphinxcontrib-devhelp     1.0.2                      py_0    conda-forge
sphinxcontrib-htmlhelp    2.0.1              pyhd8ed1ab_0    conda-forge
sphinxcontrib-jsmath      1.0.1                      py_0    conda-forge
sphinxcontrib-qthelp      1.0.3                      py_0    conda-forge
sphinxcontrib-serializinghtml 1.1.5              pyhd8ed1ab_2    conda-forge
sqlite                    3.42.0               h2c6b66d_0    conda-forge
stack_data                0.6.2              pyhd8ed1ab_0    conda-forge
statsmodels               0.14.0           py38h31356c5_1    conda-forge
svt-av1                   1.4.1                hcb278e6_0    conda-forge
tbb                       2021.9.0             hf52228f_0    conda-forge
tbb-devel                 2021.9.0             hf52228f_0    conda-forge
threadpoolctl             3.1.0              pyh8a188c0_0    conda-forge
tifffile                  2023.7.4           pyhd8ed1ab_0    conda-forge
tiledb                    2.13.2               hd532e3d_0    conda-forge
tk                        8.6.12               h27826a3_0    conda-forge
tomli                     2.0.1              pyhd8ed1ab_0    conda-forge
toolz                     0.12.0             pyhd8ed1ab_0    conda-forge
tornado                   6.3.2            py38h01eb140_0    conda-forge
tqdm                      4.65.0             pyhd8ed1ab_1    conda-forge
traitlets                 5.9.0              pyhd8ed1ab_0    conda-forge
traittypes                0.2.1              pyh9f0ad1d_2    conda-forge
typing-extensions         4.7.1                hd8ed1ab_0    conda-forge
typing_extensions         4.7.1              pyha770c72_0    conda-forge
tzcode                    2023c                h0b41bf4_0    conda-forge
tzdata                    2023c                h71feb2d_0    conda-forge
unicodedata2              15.0.0           py38h0a891b7_0    conda-forge
urllib3                   2.0.3              pyhd8ed1ab_1    conda-forge
utfcpp                    3.2.3                ha770c72_0    conda-forge
vedo                      2023.4.6           pyhd8ed1ab_0    conda-forge
vtk                       9.2.6           qt_py38h20cb935_201    conda-forge
wcwidth                   0.2.6              pyhd8ed1ab_0    conda-forge
wheel                     0.40.0             pyhd8ed1ab_0    conda-forge
widgetsnbextension        4.0.8              pyhd8ed1ab_0    conda-forge
wrapt                     1.15.0           py38h1de0b5d_0    conda-forge
wslink                    1.11.1             pyhd8ed1ab_0    conda-forge
x264                      1!164.3095           h166bdaf_2    conda-forge
x265                      3.5                  h924138e_3    conda-forge
xarray                    2023.1.0           pyhd8ed1ab_0    conda-forge
xcb-util                  0.4.0                h516909a_0    conda-forge
xcb-util-image            0.4.0                h166bdaf_0    conda-forge
xcb-util-keysyms          0.4.0                h516909a_0    conda-forge
xcb-util-renderutil       0.3.9                h166bdaf_0    conda-forge
xcb-util-wm               0.4.1                h516909a_0    conda-forge
xerces-c                  3.2.4                h55805fa_1    conda-forge
xkeyboard-config          2.38                 h0b41bf4_0    conda-forge
xorg-fixesproto           5.0               h7f98852_1002    conda-forge
xorg-kbproto              1.0.7             h7f98852_1002    conda-forge
xorg-libice               1.0.10               h7f98852_0    conda-forge
xorg-libsm                1.2.3             hd9c2040_1000    conda-forge
xorg-libx11               1.8.4                h0b41bf4_0    conda-forge
xorg-libxau               1.0.11               hd590300_0    conda-forge
xorg-libxdmcp             1.1.3                h7f98852_0    conda-forge
xorg-libxext              1.3.4                h0b41bf4_2    conda-forge
xorg-libxfixes            5.0.3             h7f98852_1004    conda-forge
xorg-libxrender           0.9.10            h7f98852_1003    conda-forge
xorg-libxt                1.3.0                hd590300_0    conda-forge
xorg-renderproto          0.11.1            h7f98852_1002    conda-forge
xorg-xextproto            7.3.0             h0b41bf4_1003    conda-forge
xorg-xf86vidmodeproto     2.3.1             h7f98852_1002    conda-forge
xorg-xproto               7.0.31            h7f98852_1007    conda-forge
xyzservices               2023.5.0           pyhd8ed1ab_1    conda-forge
xz                        5.2.6                h166bdaf_0    conda-forge
yaml                      0.2.5                h7f98852_2    conda-forge
yarl                      1.9.2            py38h01eb140_0    conda-forge
zeromq                    4.3.4                h9c3ff4c_1    conda-forge
zfp                       1.0.0                h27087fc_3    conda-forge
zipp                      3.15.0             pyhd8ed1ab_0    conda-forge
zlib                      1.2.13               hd590300_5    conda-forge
zlib-ng                   2.0.7                h0b41bf4_0    conda-forge
zstd                      1.5.2                h3eb15da_6    conda-forge
diff
1c1
< # packages in environment at /home/gabriele/miniconda3/envs/pzero:
---
> # packages in environment at /home/gabriele/miniconda3/envs/pzero_test:
251d250
< ply                       3.11                       py_1    conda-forge
274,275c273,275
< pyqt                      5.15.7           py38ha0d8c90_3    conda-forge
< pyqt5-sip                 12.11.0          py38h8dc9893_3    conda-forge
---
> pyqt5                     5.15.9                   pypi_0    pypi
> pyqt5-qt5                 5.15.2                   pypi_0    pypi
> pyqt5-sip                 12.12.1                  pypi_0    pypi
302d301
< sip                       6.7.9            py38h17151c0_0    conda-forge
325d323
< toml                      0.10.2             pyhd8ed1ab_0    conda-forge

From the diff it seems that when uninstalling pyqt (using conda uninstall pyqt) also the ply, sip and toml packages are uninstalled and are not reinstalled when using pip. For the rest there are no other differences.

I am aware that mixing conda installed packages with pip can lead to problems. For example package dependencies links are broken thus breaking the environment solving step, but I think that this is a discussion that should be moved in issue #45.

luca-penasa commented 11 months ago

Yup, I saw the issue. I traced it on other various sources (I think from the same author) but I cannot find them anymore tomorrow I'll try to reconnect the dots.

I think in the meantime the best way to proceed is maybe to create a separate issue? I don't know really. Also maybe @luca-penasa could try if he encounters the same behaviours on his Linux distro.

I can confirm the same happens on linux (arch here).

I tried to see whether I could replicate the issue in a simple test code, starting from a pyvista example:

import sys

# Setting the Qt bindings for QtPy
import os
os.environ["QT_API"] = "pyqt5"

from qtpy import QtWidgets

import numpy as np

import pyvista as pv
from pyvistaqt import QtInteractor, MainWindow

class MyMainWindow(MainWindow):
    def __init__(self, parent=None, show=True):
        QtWidgets.QMainWindow.__init__(self, parent)

        self.views = []

        self.setCentralWidget(None)      

        # simple menu to demo functions
        mainMenu = self.menuBar()
        fileMenu = mainMenu.addMenu('File')
        exitButton = QtWidgets.QAction('Exit', self)
        exitButton.setShortcut('Ctrl+Q')
        exitButton.triggered.connect(self.close)
        fileMenu.addAction(exitButton)

        # allow adding a sphere
        meshMenu = mainMenu.addMenu('Mesh')
        self.add_sphere_action = QtWidgets.QAction('Add Sphere', self)
        self.add_sphere_action.triggered.connect(self.add_sphere)
        meshMenu.addAction(self.add_sphere_action)

        # add a 3d view
        meshMenu = mainMenu.addMenu('View')
        self.add_view_action = QtWidgets.QAction('Add 3D View', self)
        self.add_view_action.triggered.connect(self.add_3d_view)
        meshMenu.addAction(self.add_view_action)

        self.add_3d_view()
        self.add_sphere()

        if show:
            self.show()

    @property
    def active_view(self):
        w = self.focusWidget()

        if w and isinstance(w, QtInteractor):
            return w

        return None

    def add_3d_view(self):
        dock_widget = QtWidgets.QDockWidget("3d view", self)
        self.addDockWidget(1, dock_widget)

        # create the frame
        self.frame = QtWidgets.QFrame()
        vlayout = QtWidgets.QVBoxLayout()

        # add the pyvista interactor object
        self.plotter = QtInteractor(self.frame)
        vlayout.addWidget(self.plotter.interactor)
        self.signal_close.connect(self.plotter.close)

        self.frame.setLayout(vlayout)
        # self.setCentralWidget(self.frame)

        dock_widget.setWidget(self.frame)
        dock_widget.setFloating(False)
        dock_widget.setVisible(True)

        self.views.append(dock_widget)

    def add_sphere(self):
        """ add a sphere to the pyqt frame """
        sphere = pv.Sphere()
        view = self.active_view
        if view:
            plotter = view
            plotter.add_mesh(sphere, show_edges=True)
            plotter.reset_camera()

if __name__ == '__main__':
    app = QtWidgets.QApplication(sys.argv)
    window = MyMainWindow()
    sys.exit(app.exec_())

Ma senza successo. Nell'esempio sopra sembra funzionare tutto correttamente. Forse qualcuno che conosce bene come viene fatto in pzero potrebbe partire da qua e vedere se riesce a replicare.

gbene commented 11 months ago

Mhh strange. For me, the provided test code does not work, I have the same dock extraction problem that I have on PZero. Using the modified env resolves the issue

https://github.com/andrea-bistacchi/PZero/assets/40857804/48d0c23a-81c0-4ce3-91e1-41b3cccc42e1

https://github.com/andrea-bistacchi/PZero/assets/40857804/4772cfe9-270d-4d79-99b6-4f3c0ce5eb88

andrea-bistacchi commented 11 months ago

Hi, in the AB_GUI_tests we've created a new environment_from_history.yml with pyqt5 >= 5.15.9 installed from pip.

It works and solves problems on Windows (tested myself) and Linux (tested by @gbene).

I'll check on Mac tonight.

If this work, we'll have a single environment that solves these GUI problems and also the duplication of environments for Mac and Windows/Linux.

andrea-bistacchi commented 11 months ago

Hi, also on Mac it almost works. The problems on Mac are:

We should check if there are particular settings on Macs to manage the splitter in the main window that partitions the space between tables and docking windows.

In any case the environment works.

andrea-bistacchi commented 11 months ago

Hi, I added a small trick at these lines. Now when the red X on a floating window is pressed, the window does not close, but goes back to the dock area. This works also on Mac solving the previous problem.

I propose to reimplement all signals pointing to tools, checking, and use this as the new interface.

gbene commented 11 months ago

Isn't this feature already implemented by default using the button to the left of the x?

https://github.com/andrea-bistacchi/PZero/assets/40857804/a870cb81-b272-4c0b-8e48-e968781438d2

andrea-bistacchi commented 11 months ago

When you undock the button to the left disappears on Windows and Mac... maybe not on Linux?

Anyway this is the solution I found on Windows and Mac.

gbene commented 11 months ago

Ah ok, strange... Then the x trick is the best solution

andrea-bistacchi commented 2 weeks ago

We should try testing all this with an up-to-date environment.