[PyQt] TypeError: setLayoutDirection(self, Qt.LayoutDirection): argument 1 has unexpected type 'ProxyMetaclass'

Kyle Altendorf sda at fstab.net
Sun Aug 4 19:22:06 BST 2019



On 2019-08-04 13:45, Kyle Altendorf wrote:
> On 2019-08-04 13:14, Phil Thompson wrote:
>> On 04/08/2019 03:04, Kyle Altendorf wrote:
>>> While reworking my code to correct the errors related to my previous
>>> message I ran into another exception loading .ui files.  This one
>>> doesn't seem to be related to 3.7.4 specifically and I ran my test 
>>> all
>>> the way back to pyqt5.8 with the latest micro for each minor version
>>> failing.
>>> 
>>> Code and output at:
>>>     https://gist.github.com/altendky/151ddfdab48d566330a2ad8099229153
>>> 
>>> The traceback ends up at:
>>>       File
>>> "/home/altendky/tmp/venv3.7.4/lib/python3.7/site-packages/PyQt5/uic/properties.py",
>>> line 417, in setProperties
>>>         getattr(widget, 'set%s%s' % (ascii_upper(prop_name[0]),
>>> prop_name[1:]))(prop_value)
>>>     TypeError: setLayoutDirection(self, Qt.LayoutDirection): argument
>>> 1 has unexpected type 'ProxyMetaclass'
>> 
>> Putting everything in the one script is probably causing problems, ie.
>> the script that loads the UI also defines the custom widget which
>> means the script is run twice (and maybe it would recurse if there was
>> no exception).
> 
> This started with an error in my real many-file application.  I first
> recreated it in multiple files for the example then compacted down to
> one.  There was recursion because I forgot to add in `if __name__...`
> so I did.  Here is a copy of the example split back into two files.
> 
> https://gist.github.com/altendky/93657f6748a94f1b10316dd4884d65a7


Adding `import bad2a` prior to the `PyQt5.uic.loadUi()` call avoids the 
exception in this example.  I know a 'similar' situation and solution 
came up awhile back and I brought it up on the list.  A quick search 
didn't turn it up in the maillist archive but as I recall the resolution 
was that the uic stuff doesn't really support loading one .ui which 
triggers loading another .ui.  There was some magic with Qt modules 
being overwritten or such global state which caused issues.  I'll go 
take a look at actually switching to regular compilation of the .ui 
files and then importing the resultant .py files to avoid all this.  The 
dynamic loading is nice but it seems not robust enough for the pile I 
have created.

Cheers,
-kyle


More information about the PyQt mailing list