Patrick,
(Commenting embedded in your reply)
On Sunday, January 31, 2021 at 8:31:17 PM UTC-5 Patrick wrote:
> It could be that with this code:
>
> Template, BaseClass = pg.Qt.loadUiType(uifilename.as_posix())
> self.FileNamingWidget = Template()
> widget = BaseClass()
> self.FileNamingWidget.setupUi(widget)
>
> then "self.FileNamingWidget" and "widget" are different objects, while
> defining a new class with:
>
> class DataPanel(QtWidgets.QWidget, loadUiType(__file__.split(".py")[0] +
> ".ui")[0]):
>
> then an instance of DataPanel is both a subclass of QWidget *and* whatever
> loadUiType()[0] returns through multiple inheritance. The type returned by
> the loadUiType(...)[0] magic lets the QWidget use the setupUi() method as
> if it were "derived from user interface descriptions created using uic" as
> described in the QWidget.setupUi() method documentation.
>
>
The __file__.split(".py")[0] + ".ui")[0]) is what threw me on my
misunderstanding on using pysideuic. Your loadUiType(__file__.split(".py")[0]
+ ".ui")[0] is basically my Template, and I think your QtWidgets.QWidget is
my BaseClass
I was trying to follow the examples on loadUiType() that returns a form
and base class and trying also to use pyqtgraph's Qt.py to handle
supporting PyQt5 and PySide2. My MainWIndow gets created fine following the
designerExample.py
<https://github.com/pyqtgraph/pyqtgraph/blob/master/examples/designerExample.py>
:
with importlib.resources.path('nvfieldcap.resources.ui', 'NVFieldCap.ui')
as uiFile:
WindowTemplate, TemplateBaseClass = pg.Qt.loadUiType(uiFile.as_posix())
class MainWindow(TemplateBaseClass):
def __init__(self, config=None):
TemplateBaseClass.__init__(self)
# Create the main window
self.ui = WindowTemplate()
self.ui.setupUi(self)
(uiFileName = 'FileNamingWidget.ui' )
uiFileName = self.get_uiFileName(config)
with importlib.resources.path('nvfieldcap.resources.ui', uiFileName) as
uifilename:
if 'PySide2' in sys.modules:
Template, BaseClass = pg.Qt.loadUiType(uifilename.as_posix())
Template and BaseClass are both classes
Template,BaseClass
(<class 'Ui_Filename_Folder_Widget'>, <class
'PySide2.QtWidgets.QTabWidget'>)
Looking at your code again though, I think I should be doing something like
Template, BaseClass = QtWidgets.QTabWidget.loadUiType(uifilename.as_posix())
My "FileNamingWidget.ui" file starts with:
<?xml version="1.0" encoding="UTF-8"?>
<ui version="4.0">
<class>Filename_Folder_Widget</class>
<widget class="QTabWidget" name="Filename_Folder_Widget">
*Ok, so QTabWidget doesn't have a loadUiType(). Scratch that.* I'm reading
this uifile inside my MainWIndow.__init__ , so I don't know what my class
is yet. (Well, I guess I do know it's a QTabWidget.)
And no, I don't use the command line uic/pysideuic tools to generate python
> files from the .ui, I just build them in QtDesigner and use the
> loadUiType(...) method. If I have a subwidget which is inserted
> programmatically into a larger form, then I'll have a small class
> definition though. So something like this:
>
> from PySide2 import QtCore, QtGui, QtWidgets
> from PySide2.QtUiTools import loadUiType
>
> class MainPanel(QtWidgets.QWidget, loadUiType("mainpanel.ui")[0]):
> def __init__(self, parent=None):
> super().__init__(parent)
> self.setupUi(self)
> # ...
> self.subPanel = SubPanel()
> self.layout().addItem(self.subPanel)
> # ...
> # dynamic ui setup for SubPanelWidget, connect signals etc
> # ...
> class SubPanel(QtWidgets.QFrame, loadUiType("subpanel.ui")[0]):
> def __init__(self, parent=None):
> super().__init__(parent)
> self.setupUi(self)
> # ...
> # other boilerplate ui setup for SubPanelWidget
>
> It's not as nice as being able to use the uic.load() method, but this was
> the first/only way I got dynamic ui loading with PySide2, so stopped
> messing around trying to figure out why load() was giving so much trouble.
>
>
I'll look over this more and see if I can follow your pattern. Thanks.
> (snip)
>>>>>>
>>>>>> TIm
--
You received this message because you are subscribed to the Google Groups
"pyqtgraph" group.
To unsubscribe from this group and stop receiving emails from it, send an email
to [email protected].
To view this discussion on the web visit
https://groups.google.com/d/msgid/pyqtgraph/dd57bc1e-dd6f-4344-934b-4412c04fd06en%40googlegroups.com.