[PyQt] pyuic4 vs uic Module

Kyle Altendorf sda at fstab.net
Thu Aug 2 21:40:43 BST 2018


On 2018-08-02 16:01, Kyle Altendorf wrote:
> I was just chatting in #pyqt with someone about the same topic.  They
> were compiling right before import using uic.compileUi() so as to have
> actual .py files for the sake of IDE completion features.  I mentioned
> having considered making a Python import hook to catch and handle
> things like `import mywindow_ui` and do a build of `mywindow.ui` to
> `mywindow_ui.py` behind the scenes.  Not sure that 'magic' would
> really be worthwhile, but maybe I'll do it for fun at some point.

I'm not really sure it's a good thing but since I mentioned it, here's a 
first pass at an import hook.

https://github.com/altendky/basicpyqt5example/commit/d981617bb8554c8d9d0c32729ecf36311e0fd23b#diff-bd949a6f240c11264122cca81a264bb8

import pathlib
import sys

import PyQt5.uic


class UiFinder:
     def find_spec(self, fullname, path, target=None):
         suffix = '_ui'

         if target is not None or not fullname.endswith(suffix):
             return

         _, _, base = fullname.rpartition('.')
         base = base[:-len(suffix)]

         path, = path
         path = pathlib.Path(path)
         py_path = path / (base + suffix + '.py')
         ui_path = path / (base + '.ui')

         with open(py_path, 'w') as py:
             PyQt5.uic.compileUi(ui_path, py, indent=4)


def install_ui_finder():
     sys.meta_path.insert(0, UiFinder())


Cheers,
-kyle


More information about the PyQt mailing list