Fixed indenting
with importlib.resources.path('nvfieldcap.resources.ui',
uiFileName) as uifilename:
uifilename = uifilename.as_posix()
class Filename_Folder_Widget(QtWidgets.QTabWidget,
pg.Qt.loadUiType(uifilename)[0]):
def __init__(self, parent=None):
super().__init__(parent)
self.setupUi(self)
if 'PySide2' in sys.modules:
self.FileNamingWidget = Filename_Folder_Widget()
On Monday, February 1, 2021 at 1:46:11 PM UTC-5 [email protected] wrote:
> Success !!!
>
> uiFileName = self.get_uiFileName(config)
> with importlib.resources.path('nvfieldcap.resources.ui',
> uiFileName) as uifilename:
> uifilename = uifilename.as_posix()
> class Filename_Folder_Widget(QtWidgets.QTabWidget,
> pg.Qt.loadUiType(uifilename)[0]):
> def __init__(self, parent=None):
> super().__init__(parent)
> self.setupUi(self)
>
> if 'PySide2' in sys.modules:
> self.FileNamingWidget = Filename_Folder_Widget()
>
> Probably also works with PyQt5 too. Haven't tested that yet.
> Thanks for all your help!
>
> On Monday, February 1, 2021 at 11:56:33 AM UTC-5 [email protected] wrote:
>
>> Thanks. Working on that now. The latest version for PySide2 on conda is
>> at 5.13.2 (at least that's what I'm finding - need to check my channel
>> order)
>> My python version is at 3.7.8 for other reasons. I'm current trying out a
>> venv and have pip installed PySide2 v5.15.2.
>>
>> Still in debugger, but...
>>
>> from PySide2.QtUiTools import loadUiType as ps2_loadUiType
>>
>> (PySide2)
>> ps2_loadUiType(uifilename.as_posix())
>> (<class '__main__.Ui_Filename_Folder_Widget'>, <class
>> 'PySide2.QtWidgets.QTabWidget'>)
>>
>> pyqtgraph
>> pg.Qt.loadUiType(uifilename.as_posix())
>> (<class 'Ui_Filename_Folder_Widget'>, <class
>> 'PySide2.QtWidgets.QTabWidget'>)
>>
>> I haven't finished stepping through the debugger, but I'm hopeful.
>>
>> On Monday, February 1, 2021 at 11:35:41 AM UTC-5 [email protected]
>> wrote:
>>
>>> On pyside2 5.14.0-5.14.2.1 there were pyuic issues, would recommend
>>> going to 5.15.0+ or 5.14.2.2.
>>>
>>> On Mon, Feb 1, 2021 at 08:32 [email protected] <[email protected]>
>>> wrote:
>>>
>>>> pyqtgraph issue #1102
>>>> <https://github.com/pyqtgraph/pyqtgraph/issues/1102>
>>>>
>>>> On Monday, February 1, 2021 at 11:28:10 AM UTC-5 [email protected]
>>>> wrote:
>>>>
>>>>> I'm starting to think my problem is with the version of PySide2 on my
>>>>> conda environment. I went to compare pyqtgraph.Qt.loadUiType with
>>>>> PySide2.QtUiTools.loadUiType. It's not there:
>>>>>
>>>>> from PySide2.QtUiTools import loadUiType
>>>>> Traceback (most recent call last):
>>>>> File "C:\Program Files\JetBrains\PyCharm Community Edition
>>>>> 2020.1\plugins\python-ce\helpers\pydev\_pydevd_bundle\pydevd_exec2.py",
>>>>> line 3, in Exec
>>>>> exec(exp, global_vars, local_vars)
>>>>> File "<input>", line 1, in <module>
>>>>> ImportError: cannot import name 'loadUiType' from 'PySide2.QtUiTools'
>>>>> (D:\anaconda3\envs\fieldcapenv_pyside\lib\site-packages\PySide2\QtUiTools.cp37-win_amd64.pyd)
>>>>>
>>>>> PySide2.__version__
>>>>> '5.13.2'
>>>>>
>>>>> I need to be at 5.14.
>>>>> On Monday, February 1, 2021 at 9:07:27 AM UTC-5 [email protected]
>>>>> wrote:
>>>>>
>>>>>> 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/2db65699-7066-4807-985e-d1bdec077998n%40googlegroups.com
>>>>
>>>> <https://groups.google.com/d/msgid/pyqtgraph/2db65699-7066-4807-985e-d1bdec077998n%40googlegroups.com?utm_medium=email&utm_source=footer>
>>>> .
>>>>
>>>
--
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/eaf4c9d2-a473-4be4-b976-dffa64c56c09n%40googlegroups.com.