diff --git a/tools/rebuildUi.py b/tools/rebuildUi.py index 98751412..2887b944 100644 --- a/tools/rebuildUi.py +++ b/tools/rebuildUi.py @@ -1,30 +1,53 @@ -import os, sys -## Search the package tree for all .ui files, compile each to -## a .py for pyqt and pyside +""" +Script for compiling Qt Designer .ui files to .py + + + +""" +import os, sys, subprocess, tempfile pyqtuic = 'pyuic4' pysideuic = 'pyside-uic' pyqt5uic = 'pyuic5' -for path, sd, files in os.walk('.'): - for f in files: - base, ext = os.path.splitext(f) - if ext != '.ui': - continue - ui = os.path.join(path, f) +usage = """Compile .ui files to .py for all supported pyqt/pyside versions. - py = os.path.join(path, base + '_pyqt.py') - if not os.path.exists(py) or os.stat(ui).st_mtime > os.stat(py).st_mtime: - os.system('%s %s > %s' % (pyqtuic, ui, py)) - print(py) + Usage: python rebuildUi.py [.ui files|search paths] - py = os.path.join(path, base + '_pyside.py') - if not os.path.exists(py) or os.stat(ui).st_mtime > os.stat(py).st_mtime: - os.system('%s %s > %s' % (pysideuic, ui, py)) - print(py) + May specify a list of .ui files and/or directories to search recursively for .ui files. +""" - py = os.path.join(path, base + '_pyqt5.py') - if not os.path.exists(py) or os.stat(ui).st_mtime > os.stat(py).st_mtime: - os.system('%s %s > %s' % (pyqt5uic, ui, py)) - print(py) +args = sys.argv[1:] +if len(args) == 0: + print usage + sys.exit(-1) + +uifiles = [] +for arg in args: + if os.path.isfile(arg) and arg.endswith('.ui'): + uifiles.append(arg) + elif os.path.isdir(arg): + # recursively search for ui files in this directory + for path, sd, files in os.walk(arg): + for f in files: + if not f.endswith('.ui'): + continue + uifiles.append(os.path.join(path, f)) + else: + print('Argument "%s" is not a directory or .ui file.' % arg) + sys.exit(-1) +# rebuild all requested ui files +for ui in uifiles: + base, _ = os.path.splitext(ui) + for compiler, ext in [(pyqtuic, '_pyqt.py'), (pysideuic, '_pyside.py'), (pyqt5uic, '_pyqt5.py')]: + py = base + ext + if os.path.exists(py) and os.stat(ui).st_mtime <= os.stat(py).st_mtime: + print("Skipping %s; already compiled." % py) + else: + cmd = '%s %s > %s' % (compiler, ui, py) + print(cmd) + try: + subprocess.check_call(cmd, shell=True) + except subprocess.CalledProcessError: + os.remove(py)