Open andrea-bistacchi opened 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.
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.
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.
Great, I'll try tomorrow. I was in the field these days.
Hi, I really like the QDockWidget solution!
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:
Please everyone share your opinion!
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!
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).
Hi Andrea! I made some progress and tried a bit the new configuration.
Now it should be fine, the Pyvista canvas is now resizing correctly.
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.
I agree.
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).
Do you mean the toolbar of the QDockWidgets or the toolbar of the "project_window"?
Hello, I like this!
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.
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.
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!
Explanation of size policy in QT 6 is here (not very intuitive).
Summarising:
This enum describes the various per-dimension sizing types used when constructing a QSizePolicy.
These flags are combined together to form the various Policy values:
QSizePolicy::PolicyFlag These flags are combined together to form the various Policy values:
This explains how to set a QDockWidget as not closable programmatically.
However the closable property can be set also in Designer:
Another useful widget we are not using at the moment is QMdiArea.
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:
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.).
I made the central widget dockable, but there are a few strange things.
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.
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.
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.
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?
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:
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:
However, I haven't found a way to use an Anaconda environment in Qt Creator. More to be investigated here.
Hi, I hope I'm progressively getting closer to the solution.
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.
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.
I'll try with MacOs in the weekend.
It looks like you cannot float the QDockWidget, even if it is set as floatable.
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.
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.
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
Hi, I found something similar here in the pyvistaqt issue #144.
And also here on VTK Discourse:
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.
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 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.
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.
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...
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.
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:
conda uninstall pyqt
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:
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/
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).
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.
Well done!
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?
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:
# 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 ```
# 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
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.
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.
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
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.
Hi, also on Mac it almost works. The problems on Mac are:
the dock area only takes a small area since the tables cover almost all the main window area.
when a window is undocked, it is not possible to dock it back; this is probably because Qt thinks that there is not enough space in the main window.
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.
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.
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
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.
Ah ok, strange... Then the x trick is the best solution
We should try testing all this with an up-to-date environment.
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.