Advertisement
stuppid_bot

Компилируем -.ui, -.qrc файлы в модули Python

Dec 13th, 2014
455
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Python 2.47 KB | None | 0 0
  1. # -*- coding: utf-8 -*-
  2. import sys
  3. import os
  4. from subprocess import call
  5. import re
  6.  
  7. """
  8. src/       # .ui, .qrc файлы
  9. compiled/  # готовые модулями
  10. compile.py # компилятор
  11. """
  12.  
  13. SRC_DIRECTORY = 'src'
  14. COMPILED_DIRECTORY = 'compiled'
  15. PYTHON_PATH = os.path.dirname(sys.executable)
  16. PUIC_PATH = PYTHON_PATH + '\\Lib\\site-packages\\PyQt4\\uic\\pyuic.py'
  17. CURRENT_PATH = os.path.dirname(__file__)
  18. COMPILED_PATH = os.path.join(CURRENT_PATH, COMPILED_DIRECTORY, '{name}.py')
  19.  
  20. MODULE_TEMPLATE = """# -*- coding: utf-8 -*-
  21. import sys
  22. from PyQt4 import QtCore, QtGui
  23. from ui_{module} import Ui_{Class}
  24.  
  25. class {Class}(QtGui.{Parent}):
  26.    def __init__(self, parent=None):
  27.        QtGui.{Parent}.__init__(self, parent)
  28.        self.parent = parent
  29.        self.ui = Ui_{Class}()
  30.        self.ui.setupUi(self)
  31.  
  32. if __name__ == '__main__':
  33.    a = QtGui.QApplication(sys.argv)
  34.    w = {Class}()
  35.    w.show()
  36.    a.exec_()
  37. """
  38.                
  39. if __name__ == '__main__':
  40.     files = os.listdir(SRC_DIRECTORY)
  41.    
  42.     for filename in files:
  43.         relpath = os.path.join(SRC_DIRECTORY, filename)
  44.        
  45.         if os.path.isfile(relpath):          
  46.             name, extension = os.path.splitext(filename)
  47.             extension = extension.lower()
  48.            
  49.             if extension in ['.ui', '.qrc']:
  50.                 source_path = os.path.join(CURRENT_PATH, relpath)
  51.                
  52.                 if extension == '.ui':
  53.                     call(['python', PUIC_PATH, source_path, '-o',
  54.                           COMPILED_PATH.format(name='ui_' + name)])
  55.                    
  56.                     f = open(source_path)
  57.                     source = f.read()
  58.                     f.close()
  59.                    
  60.                     C = re.search('<class>([^<]+)</class>', source).group(1)
  61.                     P = re.search('<widget class="([^"]+)', source).group(1)
  62.                    
  63.                     data = MODULE_TEMPLATE.format(module=name,
  64.                                                   Class=C,
  65.                                                   Parent=P)
  66.                                                          
  67.                     f = open(COMPILED_PATH.format(name=name), 'w')
  68.                     f.write(data)
  69.                     f.close()
  70.                     continue
  71.                
  72.                 call(['pyrcc4', '-o', source_path,
  73.                       COMPILED_PATH.format(name=name + '_rc')])
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement