Utilities/uic.py

changeset 0
de9c2efb9d02
child 12
1d8dd9706f46
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/Utilities/uic.py	Mon Dec 28 16:03:33 2009 +0000
@@ -0,0 +1,98 @@
+# -*- coding: utf-8 -*-
+
+# Copyright (c) 2009 Detlev Offenbach <detlev@die-offenbachs.de>
+#
+
+"""
+Module implementing a function to compile all user interface files of a
+directory or directory tree.
+"""
+
+import os
+
+def compileUiFiles(dir, recurse = False):
+    """
+    Module function to compile the .ui files of a directory tree to Python sources.
+    
+    @param dir name of a directory to scan for .ui files (string or QString)
+    @param recurse flag indicating to recurse into subdirectories (boolean)
+    """
+    try:
+        from PyQt4.uic import compileUiDir
+    except ImportError:
+        from PyQt4.uic import compileUi
+        
+        def compileUiDir(dir, recurse = False, map = None, **compileUi_args):
+            """
+            Creates Python modules from Qt Designer .ui files in a directory or
+            directory tree.
+            
+            Note: This function is a modified version of the one found in PyQt4.
+
+            @param dir Name of the directory to scan for files whose name ends with
+                '.ui'. By default the generated Python module is created in the same
+                directory ending with '.py'.
+            @param recurse flag indicating that any sub-directories should be scanned.
+            @param map an optional callable that is passed the name of the directory
+                containing the '.ui' file and the name of the Python module that will be
+                created. The callable should return a tuple of the name of the directory
+                in which the Python module will be created and the (possibly modified)
+                name of the module.
+            @param compileUi_args any additional keyword arguments that are passed to
+                the compileUi() function that is called to create each Python module.
+            """
+            def compile_ui(ui_dir, ui_file):
+                """
+                Local function to compile a single .ui file.
+                
+                @param ui_dir directory containing the .ui file (string)
+                @param ui_file file name of the .ui file (string)
+                """
+                # Ignore if it doesn't seem to be a .ui file.
+                if ui_file.endswith('.ui'):
+                    py_dir = ui_dir
+                    py_file = ui_file[:-3] + '.py'
+
+                    # Allow the caller to change the name of the .py file or generate
+                    # it in a different directory.
+                    if map is not None:
+                        py_dir, py_file = map(py_dir, py_file)
+
+                    # Make sure the destination directory exists.
+                    try:
+                        os.makedirs(py_dir)
+                    except:
+                        pass
+
+                    ui_path = os.path.join(ui_dir, ui_file)
+                    py_path = os.path.join(py_dir, py_file)
+
+                    ui_file = open(ui_path, 'r')
+                    py_file = open(py_path, 'w')
+
+                    try:
+                        compileUi(ui_file, py_file, **compileUi_args)
+                    finally:
+                        ui_file.close()
+                        py_file.close()
+
+            if recurse:
+                for root, _, files in os.walk(dir):
+                    for ui in files:
+                        compile_ui(root, ui)
+            else:
+                for ui in os.listdir(dir):
+                    if os.path.isfile(os.path.join(dir, ui)):
+                        compile_ui(dir, ui)
+
+    def pyName(py_dir, py_file):
+        """
+        Local function to create the Python source file name for the compiled .ui file.
+        
+        @param py_dir suggested name of the directory (string)
+        @param py_file suggested name for the compile source file (string)
+        @return tuple of directory name (string) and source file name (string)
+        """
+        return py_dir, "Ui_%s" % py_file
+    
+    compileUiDir(dir, recurse, pyName)

eric ide

mercurial