PandasGUI
PandasGUI copied to clipboard
Switch to qtpy
FIxes #168 Fixes #116
Hi, thanks for making PandasGui! I plan to use it in an application I'm building with Pyside6 and thought I would help out with the move to using QtPy bindings.
Changes made:
import PyQt5->import qtpyfrom PyQt5->from qtpypyqtSignal->SignalpyqtSlot->Slot- Removed PyQt5 etc. from
requirements.txtandsetup.py. Replaced with qtpy. Note, users must ensure they have PyQt/PySide installed (see the qtpy docs). If using PyQt, users must also install PyQtWebEngineWidgets separately (PySide has this built-in).
A couple of things I'm not sure about:
PandasGui.utility.fix_pyqt- will this fix work for both pyqt and pyside?PandasGui.utility.fix_ipython- if usingipython, setsipython.magic("gui qt5"). Wouldipython.magic("gui qt6")work for PyQt6/PySide6?
I ran the tests locally and they seems to run okay, although there were a few warnings (see test-output.txt
Removed PyQt5 etc. from requirements.txt and setup.py. Replaced with qtpy. Note, users must ensure they have PyQt/PySide installed (see the qtpy docs). If using PyQt, users must also install PyQtWebEngineWidgets separately (PySide has this built-in).
We should add some logic to handle this automatically, if a user doesn't have any PyQt or PySide version installed (which I think would be most users) it should automatically install some default. I'm open to suggestions on the best way to do that
PandasGui.utility.fix_pyqt - will this fix work for both pyqt and pyside? PandasGui.utility.fix_ipython - if using ipython, sets ipython.magic("gui qt5"). Would ipython.magic("gui qt6") work for PyQt6/PySide6?
Good questions... I can play around with that, I've only tried PyQt5 so far.
Hi, sorry for the really slow reply.
We should add some logic to handle this automatically
That's a fair point. I think the most common way to handle this is with optional dependencies, which can be added in the setup.py:
setup(
...,
extras_require={
"pyqt5": ["PyQt5", "PyQt5-sip", "PyQtWebEngine"],
"pyqt6": ["PyQt6", "PyQt6-sip", "PyQtWebEngine"],
"pyside2": ["PySide2"],
"pyside6": ["PySide6"],
},
)
This would still mean that by default none of these dependencies are installed. To install with e.g. pyqt5 a user would need to type:
pip install pandasgui[pyqt5]
But, as far as I know, there is no way to e.g. install pyqt5 by default, and to optionally not install it.
That might not be quite what you're after though. Another option would be to do something similar to what matplotlib does. Matplotlib have created matplotlib-base and matplotlib. matplotlib-base is the entire matplotlib library but does not have qt as a dependency. matplotlib is simply matplotlib-base with an additional dependency of qt. So users who do not need/want qt installed with matplotlb will install matplotlib-base, whilst those who want it install matplotlib. This would mean maintaining two packages for pandas-gui, although one of them will be trivial (pandas-gui would be a simple package that depends on pandas-gui-base and pyqt5 etc.)