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.

Reply via email to