Пример #1
0
    def loadUiType(cls, uifile, respath=None):
        """
        Pyside lacks the "loadUiType" command, so we have to convert the ui file to py code in-memory first
        and then execute it in a special frame to retrieve the form_class.
        """
        parsed = xml.parse(uifile)
        widget_class = parsed.find('widget').get('class')
        form_class = parsed.find('class').text

        with open(uifile, 'r') as f:
            o = StringIO()
            frame = {}

            pysideuic.compileUi(f, o, indent=0)
            pyc = compile(o.getvalue(), '<string>', 'exec')

            hasres = respath and respath not in sys.path
            if hasres:
                sys.path.append(respath)

            exec(pyc, frame)

            if hasres:
                sys.path.remove(respath)

            #Fetch the base_class and form class based on their type in the xml from designer
            form_class = frame['Ui_%s'%form_class]
            base_class = eval('PySide.QtGui.%s'%widget_class)
        return form_class, base_class
Пример #2
0
    def loadUiType(uiFile):
        """
        Pyside "loadUiType" command like PyQt4 has one, 
        so we have to convert the ui file to py code in-memory first    
        and then execute it in a special frame to retrieve the form_class.
        """
        import pysideuic
        import xml.etree.ElementTree as xml
        #from io import StringIO

        parsed = xml.parse(uiFile)
        widget_class = parsed.find('widget').get('class')
        form_class = parsed.find('class').text

        with open(uiFile, 'r') as f:
            o = StringIO()
            frame = {}

            pysideuic.compileUi(f, o, indent=0)
            pyc = compile(o.getvalue(), '<string>', 'exec')
            exec(pyc, frame)

            #Fetch the base_class and form class based on their type in the xml from designer
            form_class = frame['Ui_%s' % form_class]
            base_class = eval('QtGui.%s' % widget_class)

        return form_class, base_class
Пример #3
0
def get_pyside_class( ui_file ):
   """
   Pablo Winant
   """

   parsed = xml.parse( ui_file )
   #print parsed
   widget_class = parsed.find( 'widget' ).get( 'class' )
   form_class = parsed.find( 'class' ).text
   #print widget_class, form_class
   with open( ui_file, 'r' ) as f:
      print f
      o = StringIO()
      frame = {}
      try:
         pysideuic.compileUi( f, o, indent = 0 )
      except:
         print 'errroorrrrr'

      pyc = compile( o.getvalue(), '<string>', 'exec' )
      exec pyc in frame
      
      # Fetch the base_class and form class based on their type in the xml from designer
      form_class = frame['Ui_{0}'.format( form_class )]
      base_class = eval( 'QtGui.{0}'.format( widget_class ) )
      
   return form_class, base_class
Пример #4
0
def _load_ui_type(ui_file):
    """Load a ui file for PySide.

    PySide lacks the "_load_ui_type" command, so we have to convert
    the UI file to python code in-memory first and then execute it in a
    special frame to retrieve the form_class.
    Args:
        ui_file (str): The .ui file.
    Returns:
        The base and form class, derived from the .ui file.
    """
    parsed = xml.parse(ui_file)
    widget_class = parsed.find('widget').get('class')
    form_class = parsed.find('class').text
    with open(ui_file, 'r') as f:
        o = StringIO()
        frame = {}

        pysideuic.compileUi(f, o, indent=0)
        pyc = compile(o.getvalue(), '<string>', 'exec')
        exec pyc in frame

        # Fetch the base_class and form_class based on their type
        # in the xml from designer
        base_class = getattr(QtWidgets, widget_class)
        form_class = frame['Ui_%s' % form_class]
        return base_class, form_class
Пример #5
0
def get_pyside_class(ui_file):
    """
   Pablo Winant
   """

    parsed = xml.parse(ui_file)
    #print parsed
    widget_class = parsed.find('widget').get('class')
    form_class = parsed.find('class').text
    #print widget_class, form_class
    with open(ui_file, 'r') as f:
        print f
        o = StringIO()
        frame = {}
        try:
            pysideuic.compileUi(f, o, indent=0)
        except:
            print 'errroorrrrr'

        pyc = compile(o.getvalue(), '<string>', 'exec')
        exec pyc in frame

        # Fetch the base_class and form class based on their type in the xml from designer
        form_class = frame['Ui_{0}'.format(form_class)]
        base_class = eval('QtGui.{0}'.format(widget_class))

    return form_class, base_class
Пример #6
0
def loadUi(uifile, widget):
    """
    Load .ui file into widget

    @param uifile: filename
    @type uifile: str
    @type widget: QtWidgets.QWidget
    """
    if PYQT_NAME != 'PySide':
        m = __import__(PYQT_NAME + '.uic')
        return m.uic.loadUi(uifile, widget)

    import io, pysideuic
    stream = io.BytesIO()
    pysideuic.compileUi(uifile, stream)
    ns_locals = {}
    exec(stream.getvalue(), None, ns_locals)

    if 'Ui_Form' in ns_locals:
        form = ns_locals['Ui_Form']()
    else:
        form = ns_locals['Ui_Dialog']()

    form.setupUi(widget)
    return form
Пример #7
0
def loadUiType(ui_file):
    from wishlib.qt import active, QtGui
    if active == "PySide":
        import pysideuic
        parsed = xml.parse(ui_file)
        widget_class = parsed.find('widget').get('class')
        form_class = parsed.find('class').text

        with open(ui_file, 'r') as f:
            o = StringIO()
            frame = {}

            pysideuic.compileUi(f, o, indent=0)
            pyc = compile(o.getvalue(), '<string>', 'exec')
            exec pyc in frame

            # Fetch the base_class and form class based on their type in the
            # xml from designer
            form_class = frame['Ui_%s' % form_class]
            # base_class = eval('QtGui.%s' % widget_class)
            base_class = getattr(QtGui, widget_class)
        return form_class, base_class
    elif active == "PyQt4":
        from PyQt4 import uic
        return uic.loadUiType(ui_file)
    return None
Пример #8
0
    def loadUiType(cls, uifile, respath=None):
        """
        Pyside lacks the "loadUiType" command, so we have to convert the ui file to py code in-memory first
        and then execute it in a special frame to retrieve the form_class.
        """
        parsed = xml.parse(uifile)
        widget_class = parsed.find('widget').get('class')
        form_class = parsed.find('class').text

        with open(uifile, 'r') as f:
            o = StringIO()
            frame = {}

            pysideuic.compileUi(f, o, indent=0)
            pyc = compile(o.getvalue(), '<string>', 'exec')

            hasres = respath and respath not in sys.path
            if hasres:
                sys.path.append(respath)

            exec(pyc, frame)

            if hasres:
                sys.path.remove(respath)

            #Fetch the base_class and form class based on their type in the xml from designer
            form_class = frame['Ui_%s' % form_class]
            base_class = eval('PySide.QtGui.%s' % widget_class)
        return form_class, base_class
Пример #9
0
    def loadUiType(ui_file):
        """
        Pyside "loadUiType" command like PyQt4 has one, so we have to convert the
        ui file to py code in-memory first and then execute it in a special frame
        to retrieve the form_class.
        """

        parsed = xml.parse(ui_file)
        widget_class = parsed.find('widget').get('class')
        form_class = parsed.find('class').text

        with open(ui_file, 'r') as f:
            stringioval = StringIO()
            frame = {}

            uic.compileUi(f, stringioval, indent=0)
            pyc = compile(stringioval.getvalue(), '<string>', 'exec')
            exec(pyc, frame)

            # Fetch the base_class and form class based on their type
            # in the xml from designer
            form_class = frame['Ui_%s' % form_class]
            base_class = eval('QtWidgets.%s' % widget_class)

        return form_class, base_class
Пример #10
0
def compile_file(in_path, out_path):
    """
    Compile a .ui file into a .py file.

    :param in_path: Input .ui file path.
    :type in_path: basestring

    :param out_path: Output .py file path.
    :type out_path: basestring

    :returns: Nothing.
    """
    if in_path.endswith('.ui') is False:
        print('Warning: Skipping %r' % in_path)
        return
    if not os.path.isfile(in_path):
        print('Warning: Skipping: %r' % in_path)
        return
    in_dir, in_name = os.path.split(in_path)
    out_dir, out_name = os.path.split(out_path)

    msg = 'Compiling: {0} -> {1}'
    print(msg.format(in_name, out_name))
    try:
        f = open(out_path, 'w')
        compileUi(in_path, f, False, 4, False)
        f.close()
    except Exception:
        print('Warning: File did not compile, %r' % in_path)
        raise
    return
Пример #11
0
    def loadUiType(uiFile):
        """
        Pyside "loadUiType" command like PyQt4 has one, so we have to convert
        the ui file to py code in-memory first and then execute it in a
        special frame to retrieve the form_class.

        from stackoverflow: http://stackoverflow.com/a/14195313/3781327

        seems like this might also be a legitimate solution, but I'm not sure
        how to make PyQt4 and pyside look the same...
            http://stackoverflow.com/a/8717832
        """
        import pysideuic
        import xml.etree.ElementTree as xml
        #from io import StringIO

        parsed = xml.parse(uiFile)
        widget_class = parsed.find('widget').get('class')
        form_class = parsed.find('class').text

        with open(uiFile, 'r') as f:
            o = StringIO()
            frame = {}

            pysideuic.compileUi(f, o, indent=0)
            pyc = compile(o.getvalue(), '<string>', 'exec')
            exec(pyc, frame)

            #Fetch the base_class and form class based on their type in the xml from designer
            form_class = frame['Ui_%s' % form_class]
            base_class = eval('QtGui.%s' % widget_class)

        return form_class, base_class
Пример #12
0
def loadUiType(ui_file):
    """
    Pyside lacks the "loadUiType" command, so we have to convert
    the ui file to py code in-memory first and then execute it in
    a special frame to retrieve the form_class.
    """
    
    parsed = xml.parse(ui_file)
    widget_class = parsed.find('widget').get('class')
    form_class = parsed.find('class').text
    
    with open(ui_file, 'r') as f:
        o = StringIO()
        frame = {}
    
        pysideuic.compileUi(f, o, indent=0)
        pyc = compile(o.getvalue(), '<string>', 'exec')
        exec pyc in frame
        
        # Fetch the base_class and form_class based on their type
        # in the xml from designer
        form_class = frame['Ui_%s' % form_class]
        base_class = eval('QtGui.%s' % widget_class)
    
    return form_class, base_class    
Пример #13
0
def load_ui_type(UI_FILE):
	'''
	Pyside lacks the "load_ui_type" command, so we have to convert the ui file
	to py code in-memory first and then execute it in a special frame to
	retrieve the form_class.
	'''
	parsed = xml.parse(UI_FILE)
	widget_class = parsed.find('widget').get('class')
	form_class = parsed.find('class').text

	with open(UI_FILE, 'r') as f:
		o = StringIO()
		frame = {}

		if QT_BINDINGS == 'PySide':
			pysideuic.compileUi(f, o, indent=0)
			pyc = compile(o.getvalue(), '<string>', 'exec')
			exec pyc in frame

			# Fetch the base_class and form class based on their type in the xml
			# from designer
			form_class = frame['Ui_%s'%form_class]
			base_class = eval('QtGui.%s'%widget_class)
		elif QT_BINDINGS == 'PyQt':
			form_class = PyQtFixer
			base_class = QtGui.QMainWindow
	return form_class, base_class
def _load_ui_type(ui_file):
    """Load a ui file for PySide.

    PySide lacks the "_load_ui_type" command, so we have to convert
    the UI file to python code in-memory first and then execute it in a
    special frame to retrieve the form_class.
    Args:
        ui_file (str): The .ui file.
    Returns:
        The base and form class, derived from the .ui file.
    """
    parsed = xml.parse(ui_file)
    widget_class = parsed.find('widget').get('class')
    form_class = parsed.find('class').text
    with open(ui_file, 'r') as f:
        o = StringIO()
        frame = {}

        pysideuic.compileUi(f, o, indent=0)
        pyc = compile(o.getvalue(), '<string>', 'exec')
        exec pyc in frame

        # Fetch the base_class and form_class based on their type
        # in the xml from designer
        base_class = getattr(QtWidgets, widget_class)
        form_class = frame['Ui_%s' % form_class]
        return base_class, form_class
Пример #15
0
def loadUiType(uiFile):
    '''
    Pyside lacks the "loadUiType" command, so we have to convert the ui file to py code in-memory first
    and then execute it in a special frame to retrieve the form_class.
    '''
    parsed = xml.parse(uiFile)
    widget_class = parsed.find('widget').get('class')
    form_class = parsed.find('class').text

    with open(uiFile, 'r') as f:
        o = StringIO()
        frame = {}

        pysideuic.compileUi(f, o, indent=0)
        pyc = compile(o.getvalue(), '<string>', 'exec')

        if PY_2:
            exec('''pyc in frame''')
        else:
            exec(pyc, frame)

        #Fetch the base_class and form class based on their type in the xml from designer
        form_class = frame['Ui_%s' % form_class]
        base_class = eval('QtGui.%s' % widget_class)
    return form_class, base_class
Пример #16
0
def loadUiType(fileVar, subFolder="ui", uiName=None):
    """
	To use this, pass the path to a UI file, and capture the output
	as FormClass and BaseClass.  Define your class inheriting from both
	and call self.setupUi(self) in the __init__
	"""
    uiFolder, filename = os.path.split(fileVar)
    if uiName is None:
        uiName = os.path.splitext(filename)[0]
    if subFolder:
        uiFile = os.path.join(uiFolder, subFolder, uiName + ".ui")

    parsed = xml.parse(uiFile)
    widget_class = parsed.find('widget').get('class')
    form_class = parsed.find('class').text

    with open(uiFile, 'r') as f:
        o = StringIO()
        frame = {}

        uic.compileUi(f, o, indent=0)
        pyc = compile(o.getvalue(), '<string>', 'exec')
        exec pyc in frame

        #Fetch the base_class and form class based on their type in the xml from designer
        form_class = frame['Ui_{0}'.format(form_class)]

        try:
            base_class = eval('QtGui.{0}'.format(widget_class))
        except:
            base_class = eval('QtWidgets.{0}'.format(widget_class))

    return form_class, base_class
Пример #17
0
def loadUiType(ui_file):
        """
        Pyside lacks the "loadUiType" command, so we have to convert the ui file
        to py code in-memory first and then execute it in a special frame to
        retrieve the form_class.

        Usage:

            >>> class SomeDialog(loadUiType('some_dialog.ui')):
            >>>     def __init__(self, *args, **kwargs):
            >>>         super(SomeDialog, self).__init__(*args, **kwargs)

        """
        parsed = xml.parse(ui_file)
        widget_class = parsed.find('widget').get('class')
        form_class = parsed.find('class').text

        with open(ui_file, 'r') as f:
            o = StringIO()
            frame = {}

            pysideuic.compileUi(f, o, indent=0)
            pyc = compile(o.getvalue(), '<string>', 'exec')
            exec pyc in frame

            # Fetch the base_class and form class based on their type in the xml
            # from designer
            form_class = frame['Ui_%s' % form_class]
            base_class = eval('QtGui.%s' % widget_class)
        return type('PySideUI', (form_class, base_class), {})
Пример #18
0
    def loadUiType(uiFile):
        """
        Pyside "loadUiType" command like PyQt4 has one, so we have to convert
        the ui file to py code in-memory first and then execute it in a
        special frame to retrieve the form_class.

        from stackoverflow: http://stackoverflow.com/a/14195313/3781327

        seems like this might also be a legitimate solution, but I'm not sure
        how to make PyQt4 and pyside look the same...
            http://stackoverflow.com/a/8717832
        """
        import pysideuic
        import xml.etree.ElementTree as xml

        # from io import StringIO

        parsed = xml.parse(uiFile)
        widget_class = parsed.find("widget").get("class")
        form_class = parsed.find("class").text

        with open(uiFile, "r") as f:
            o = StringIO()
            frame = {}

            pysideuic.compileUi(f, o, indent=0)
            pyc = compile(o.getvalue(), "<string>", "exec")
            exec(pyc, frame)

            # Fetch the base_class and form class based on their type in the xml from designer
            form_class = frame["Ui_%s" % form_class]
            base_class = eval("QtGui.%s" % widget_class)

        return form_class, base_class
Пример #19
0
    def compile_ui(self, ui_file, py_file=None):
        """Compile the .ui files to python modules."""
        self._wrapuic(i18n_module=self.i18n_module)
        if py_file is None:
            py_file = os.path.join(
                self.output_dir,
                os.path.basename(ui_file).replace(
                    '.ui', self.generated_extension
                ).lower()
            )

        fi = open(ui_file, 'r')
        fo = open(py_file, 'wt')
        try:
            from pysideuic import compileUi
            compileUi(fi, fo, execute=self.ui_execute, indent=self.indent,
                      from_imports=self.from_imports)
            log.info("Compiled %s into %s", ui_file, py_file)
        except ImportError:
            log.warn("You need to have pyside-tools installed in order to "
                     "compile .ui files.")
        except Exception, err:
            log.warn("Failed to generate %r from %r: %s", py_file, ui_file, err)
            if not os.path.exists(py_file) or not not file(py_file).read():
                raise SystemExit(1)
            return
Пример #20
0
    def loadUiType(uiFile):
        """
        Pyside "loadUiType" command like PyQt4 has one, so we have to convert the ui file to py code in-memory first    and then execute it in a special frame to retrieve the form_class.
        """
        import pysideuic
        import xml.etree.ElementTree as xml
        #from io import StringIO
        
        parsed = xml.parse(uiFile)
        widget_class = parsed.find('widget').get('class')
        form_class = parsed.find('class').text
        
        with open(uiFile, 'r') as f:
            o = StringIO()
            frame = {}

            pysideuic.compileUi(f, o, indent=0)
            pyc = compile(o.getvalue(), '<string>', 'exec')
            exec(pyc, frame)

            #Fetch the base_class and form class based on their type in the xml from designer
            form_class = frame['Ui_%s'%form_class]
            base_class = eval('QtGui.%s'%widget_class)

        return form_class, base_class
def loadUiType(uiFile):
    """
	Pyside lacks the "loadUiType" command, so we have to convert the ui file to py code in-memory first
	and then execute it in a special frame to retrieve the form_class.
	"""
    parsed = xml.parse(uiFile)
    widget_class = parsed.find("widget").get("class")
    form_class = parsed.find("class").text

    with open(uiFile, "r") as f:
        o = StringIO()
        frame = {}

        if QtType == "PySide":
            pysideuic.compileUi(f, o, indent=0)
            pyc = compile(o.getvalue(), "<string>", "exec")
            exec pyc in frame

            # Fetch the base_class and form class based on their type in the xml from designer
            form_class = frame["Ui_%s" % form_class]
            base_class = eval("QtGui.%s" % widget_class)
        elif QtType == "PyQt":
            form_class = PyQtFixer
            base_class = QtGui.QMainWindow
    return form_class, base_class
Пример #22
0
def generateUi(uifname, pyfname, execute, indent):
    if pyfname == "-":
        pyfile = sys.stdout
    else:
        pyfile = file(pyfname, "w")

    pysideuic.compileUi(uifname, pyfile, execute, indent)
    return 0
Пример #23
0
def convert(input_file):
    if not input_file.endswith(".ui"):
        return False
    output_file = os.path.join(os.path.dirname(input_file),
                               os.path.basename(input_file).replace(".ui", ".py"))
    with open(output_file, 'w') as fp:
        compileUi(input_file, fp, False, 4, False)
    return output_file
Пример #24
0
def compileUI():
	from pysideuic import compileUi
	
	moduleName = __name__.split('.')[0]
	modulePath = os.path.abspath(imp.find_module(moduleName)[1])
	pyfile = open(modulePath+'\\mainWindow.py', 'w')
	compileUi(modulePath+"\\mainWindow.ui", pyfile, False, 4,False)
	pyfile.close()
Пример #25
0
def pysdieConvert():
    """
	@convert ui file to the python file
	"""
    uiPath = mc.fileDialog2(ff="*ui", dialogStyle=1, fileMode=1)[0]
    pyPath = uiPath.replace(".ui", "_ui.py")
    pyFile = open(pyPath, "w")
    compileUi(uiPath, pyFile, False, 4, False)
    pyFile.close()
Пример #26
0
def convert(input_file):
    if not input_file.endswith(".ui"):
        return False
    output_file = os.path.join(
        os.path.dirname(input_file),
        os.path.basename(input_file).replace(".ui", ".py"))
    with open(output_file, 'w') as fp:
        compileUi(input_file, fp, False, 4, False)
    return output_file
Пример #27
0
def compileUIFiles(uiDir):
    for name in os.listdir(uiDir):
        uiFilePath = os.path.join(uiDir, name)

        if os.path.isfile(uiFilePath):
            if name.endswith(".ui"):
                uiResultPath = (name[:-3] + ".py").lower()

                with open(os.path.join(uiDir, uiResultPath), "w") as f:
                    compileUi(uiFilePath, f)
Пример #28
0
def compileUIFiles(uiDir):
    for name in os.listdir(uiDir):
        uiFilePath = os.path.join(uiDir, name)

        if os.path.isfile(uiFilePath):
            if name.endswith(".ui"):
                uiResultPath = (name[:-3] + ".py").lower()

                with open(os.path.join(uiDir, uiResultPath), "w") as f:
                    compileUi(uiFilePath, f)
Пример #29
0
def _loadUiType(uiFile):
    """
    PySide lacks a "loadUiType" command like PyQt4's, so we have to convert
    the ui file to py code in-memory first and then execute it in a
    special frame to retrieve the form_class.

    from stackoverflow: http://stackoverflow.com/a/14195313/3781327

    seems like this might also be a legitimate solution, but I'm not sure
    how to make PyQt4 and pyside look the same...
        http://stackoverflow.com/a/8717832
    """

    if QT_LIB == "PYSIDE":
        import pysideuic
    else:
        try:
            import pyside2uic as pysideuic
        except ImportError:
            # later vserions of pyside2 have dropped pysideuic; use the uic binary instead.
            pysideuic = None

    # get class names from ui file
    import xml.etree.ElementTree as xml
    parsed = xml.parse(uiFile)
    widget_class = parsed.find('widget').get('class')
    form_class = parsed.find('class').text

    # convert ui file to python code
    if pysideuic is None:
        if QT_LIB == PYSIDE2:
            pyside2version = tuple(map(int, PySide2.__version__.split(".")))
            if pyside2version >= (5, 14) and pyside2version < (5, 14, 2, 2):
                warnings.warn(
                    'For UI compilation, it is recommended to upgrade to PySide >= 5.15'
                )
        uic_executable = QT_LIB.lower() + '-uic'
        uipy = subprocess.check_output([uic_executable, uiFile])
    else:
        o = _StringIO()
        with open(uiFile, 'r') as f:
            pysideuic.compileUi(f, o, indent=0)
        uipy = o.getvalue()

    # exceute python code
    pyc = compile(uipy, '<string>', 'exec')
    frame = {}
    exec(pyc, frame)

    # fetch the base_class and form class based on their type in the xml from designer
    form_class = frame['Ui_%s' % form_class]
    base_class = eval('QtGui.%s' % widget_class)

    return form_class, base_class
Пример #30
0
def rebuild_pyui_file(filename):
    uifile_patch = LTK_PATCH + LGT_UI_PATCH + filename
    pyfile_patch = LTK_PATCH + LGT_PYUI_PATCH + filename.split(".")[0] + ".py"
    uifile_time = os.path.getmtime(uifile_patch)
    pyfile_time = os.path.isfile(pyfile_patch) == True and os.path.getmtime(pyfile_patch) or 0
    if pyfile_time < uifile_time:
        uifile = open(uifile_patch, "r")
        pyfile = open(pyfile_patch, "w")
        uic.compileUi(uifile, pyfile)
        print "RECOMPILE: " + LTK_PATCH + LGT_UI_PATCH + filename
        uifile.close()
        pyfile.close()
Пример #31
0
def load_ui_type(ui_file):
    """
    Pyside lacks the "loadUiType" command, so we have to convert the ui file to py code in-memory first
    and then execute it in a special frame to retrieve the form_class.
    This function return the form and base classes for the given qtdesigner ui file.
    """

    # add path for pysideuic
    import sys
    sys.path.append(THIRD_PARTY_PATH)

    # lazy import

    try:
        # python
        import os
        import logging
        import re
        import shutil
        from cStringIO import StringIO
        import xml.etree.ElementTree as xml
        import types
        # PySide
        from PySide import QtGui
        from PySide import QtCore
        from PySide import QtUiTools
        import pysideuic

    except Exception as exception_instance:
        # log
        logger.debug('Import failed: {0}'.format(exception_instance))
        # return None
        return None

    # compile ui

    parsed = xml.parse(ui_file)
    widget_class = parsed.find('widget').get('class')
    form_class = parsed.find('class').text

    with open(ui_file, 'r') as f:
        o = StringIO()
        frame = {}

        pysideuic.compileUi(f, o, indent=0)
        pyc = compile(o.getvalue(), '<string>', 'exec')
        exec pyc in frame

        # Fetch the base_class and form class based on their type in the xml from designer
        form_class = frame['Ui_%s' % form_class]
        base_class = eval('QtGui.%s' % widget_class)

    return form_class, base_class
Пример #32
0
def rebuild_pyui_file(filename):
    uifile_patch = LTK_PATCH + LGT_UI_PATCH + filename
    pyfile_patch = LTK_PATCH + LGT_PYUI_PATCH + filename.split(".")[0] + ".py"
    uifile_time = os.path.getmtime(uifile_patch)
    pyfile_time = os.path.isfile(pyfile_patch) == True and os.path.getmtime(
        pyfile_patch) or 0
    if pyfile_time < uifile_time:
        uifile = open(uifile_patch, "r")
        pyfile = open(pyfile_patch, "w")
        uic.compileUi(uifile, pyfile)
        print "RECOMPILE: " + LTK_PATCH + LGT_UI_PATCH + filename
        uifile.close()
        pyfile.close()
Пример #33
0
def compile_if_necessary(input_ui_file,output_py_file):
    #prepare the file names
    input_path = module_folder+input_ui_file
    output_path = module_folder+output_py_file
    #recompile the .ui Qt file if this script is launched directly
    #or if the compiled .py GUI file does not exist
    #or if it is more recent than the compiled .py GUI file,
    #if __name__=='__main__' or not(os.path.isfile(output_path)) or os.path.getmtime(input_path)>os.path.getmtime(output_path):
    if not(os.path.isfile(output_path)) or os.path.getmtime(input_path)>os.path.getmtime(output_path):
        print "update detected: recompiling "+input_ui_file
        f=open(output_path,"w")
        pysideuic.compileUi(input_path,f)
        f.close()    
Пример #34
0
def loadUiType(uiFile):
    parsed = xml.parse(uiFile)
    widget_class = parsed.find('widget').get('class')
    form_class = parsed.find('class').text
    with open(uiFile, 'r') as f:
        o = StringIO()
        frame = {}
        pysideuic.compileUi(f, o, indent=0)
        pyc = compile(o.getvalue(), '<string>', 'exec')
        exec pyc in frame
        form_class = frame['Ui_%s' % form_class]
        base_class = getattr(QtWidgets, widget_class)
    return form_class, base_class
def main():
    for root, dirs, files in os.walk(os.path.abspath(CURRENT_DIR)):
        for f in files:
            print f
            if f.lower().endswith(".qrc"):
                name = os.path.basename(f).split(".")[0] + ".py"
                subprocess.call([PYSIDE_RCC_EXE, os.path.join(root, f), "-o", os.path.join(OUTPUT_DIR, name)])

            if f.lower().endswith(".ui"):
                name = os.path.basename(f).split(".")[0] + ".py"
                ui_path = os.path.join(root, f)
                pyfile = open(os.path.join(OUTPUT_DIR, name), 'w')
                compileUi(ui_path, pyfile, False, 4, False)
                pyfile.close()
Пример #36
0
def loadUiType(uiFile, sourceFile=None, className="DefaultWidgetClass"):
    """ Used to define a custom widget's class.
    
    :Parameters:
        uiFile : `str`
            UI file path. Can be relative if loading from the same directory as sourceFile.
        sourceFile : `str`
            File path of loading module.
            Used to help find embedded resources and to find uiFile when the file path is relative.
        className : `str`
            Class name
    :Returns:
        Class type
    :Rtype:
        `type`
    """
    import sys
    import xml.etree.ElementTree as xml
    from StringIO import StringIO
    from Qt import QtWidgets

    if not os.path.exists(uiFile) and not os.path.isabs(uiFile):
        if sourceFile is None:
            uiFile = resource_filename(__name__, uiFile)
            sourceDir = os.path.dirname(uiFile)
        else:
            sourceDir = os.path.dirname(sourceFile)
            uiFile = os.path.join(sourceDir, uiFile)
    else:
        sourceDir = os.path.dirname(uiFile)

    # Search for resources in this tool's directory.
    if sourceDir not in sys.path:
        sys.path.insert(0, sourceDir)

    parsed = xml.parse(uiFile)
    widget_class = parsed.find('widget').get('class')
    form_class = parsed.find('class').text

    with open(uiFile) as f:
        o = StringIO()
        frame = {}
        uic.compileUi(f, o, indent=0)
        pyc = compile(o.getvalue(), "<string>", "exec")
        exec pyc in frame

        # Fetch the base_class and form class based on their type.
        form_class = frame["Ui_{}".format(form_class)]
        base_class = eval("QtWidgets.{}".format(widget_class))
    return type("{}Base".format(className), (form_class, base_class), {})
Пример #37
0
def load_ui_type(ui_file):
	parsed= xml.parse(ui_file)
	widget_class =parsed.find('widget').get('class')
	form_class =parsed.find('class').text
	with open(ui_file,'r') as f:
		o= StringIO()
		frame={}
		
		pysideuic.compileUi(f,o,indent=0)
		pyc= compile(o.getvalue(), '<string>',  'exec')
		exec pyc in frame
		
		form_class = frame ['Ui_{0}'.format (form_class)]
		base_class = eval( 'QtGui.{0}'.format(widget_class))
	return form_class, base_class
Пример #38
0
def convertUItoPython(filePath):
	'''
	PyQt Designer: Convert .ui file to .py file
	filePath: str 'D:\Google Drive\My3DWork\QtDesigner\bulletUi.ui'
	Returns:

	'''
	import sys, pprint
	from pysideuic import compileUi
	filePath = filePath.replace('\\', '/')
	print 'converting %s'%filePath
	pyfilePath = filePath.replace('.ui', '.py')
	pyfile = open(pyfilePath, 'w')
	compileUi(filePath, pyfile, False, 4,False)
	pyfile.close()
Пример #39
0
def compile_ui(uifile):
    """Compile the given Qt designer file. The compiled file will be in the same directory but ends with _ui.py.

    :param uifile: filepath to the uifile
    :type uifile: str
    :returns: None
    :rtype: None
    :raises: None
    """
    print "Compileing: %s" % uifile
    outputpath = uifile.rsplit(os.path.extsep, 1)[0] + "_ui.py"
    print "Outputfile: %s" % outputpath
    outputfile = open(os.path.abspath(outputpath), "w")
    pysideuic.compileUi(os.path.abspath(uifile), outputfile)
    print "Done!"
Пример #40
0
def compileAllUis(p_sInitPath):
	sDirFiles = os.listdir(p_sInitPath)
	for sFile in sDirFiles:
		if (os.path.splitext(sFile)[1] == ".ui"):
			sUiFile = os.path.join(p_sInitPath, sFile) 
			sPyUiFilePath = os.path.join(p_sInitPath, ((os.path.splitext(sFile)[0]) + "_ui.py"))
			# print sUiFile
			# print sPyUiFilePath
			fPyUiFile = open(sPyUiFilePath, "w")
			pui.compileUi(sUiFile, fPyUiFile)
			fPyUiFile.close()
	
	sSubdirs = io.getImmediateSubdirectories(p_sInitPath)
	for sPath in sSubdirs:
		compileAllUis(sPath)
Пример #41
0
Файл: setup.py Проект: dacut/ret
    def run(self):
        if self.pyside_ui_dirs is not None:
            from pysideuic import compileUi
            for ui_dir in self.pyside_ui_dirs:
                for ui_file in listdir(ui_dir):
                    if not ui_file.endswith(".ui"):
                        continue
                    ui_path = path_join(ui_dir, ui_file)
                    py_file = "Ui_" + splitext(ui_file)[0] + ".py"
                    py_path = path_join(ui_dir, py_file)

                    if newer(ui_path, py_path):
                        log.info("pysideuic %s -> %s", ui_path, py_path)
                        with open(ui_path, "r") as ifd:
                            with open(py_path, "w") as ofd:
                                compileUi(ifd, ofd)
Пример #42
0
    def _generate(self):
        """ Generate the Python code. """

        if sys.hexversion >= 0x03000000:
            if self._opts.output == '-':
                from io import TextIOWrapper

                pyfile = TextIOWrapper(sys.stdout.buffer, encoding='utf8')
            else:
                pyfile = open(self._opts.output, 'wt', encoding='utf8')
        else:
            if self._opts.output == '-':
                pyfile = sys.stdout
            else:
                pyfile = open(self._opts.output, 'wt')

        compileUi(self._ui_file, pyfile, self._opts.execute, self._opts.indent, self._opts.from_imports)
Пример #43
0
    def convertFile(self, *args):
        if self.filePathName is not None and self.textInput.getText() != '':
            import sys, pprint
            from pysideuic import compileUi

            drive, path = os.path.splitdrive(self.filePathName)
            path, filename = os.path.split(path)
            outFilePath = drive + path + "/" + self.textInput.getText()
            #print ("%s , %s , %s" % (drive,path,filename))

            pyfile = open(outFilePath, 'w')
            compileUi(self.filePathName, pyfile, False, 4, False)
            pyfile.close()
        elif self.textInput.getText() == '':
            print "No output Filename"
        else:
            print "No File Selected"
Пример #44
0
def loadUiType(uiFile):
    """
	Pyside lacks the "loadUiType" command, so we have to convert the ui file to py code in-memory first
	and then execute it in a special frame to retrieve the form_class.
	"""
    parsed = xml.parse(uiFile)
    widget_class = parsed.find('widget').get('class')
    form_class = parsed.find('class').text
    with open(uiFile, 'r') as f:
        o = StringIO()
        frame = {}
        pysideuic.compileUi(f, o, indent=0)
        pyc = compile(o.getvalue(), '<string>', 'exec')
        exec pyc in frame
        form_class = frame['Ui_%s' % form_class]
        base_class = getattr(QtWidgets, widget_class)
    return form_class, base_class
Пример #45
0
def loadUiType(uiFile):
    parsed = xml.parse(uiFile)
    widget_class = parsed.find('widget').get('class')
    form_class = parsed.find('class').text

    with open(uiFile, 'r') as f:
        o = StringIO()
        frame = {}

        pysideuic.compileUi(f, o, indent=0)
        pyc = compile(o.getvalue(), '<string>', 'exec')
        exec pyc in frame

        #Fetch the base_class and form class based on their type in the xml from designer
        form_class = frame['Ui_%s' % form_class]
        base_class = eval('QtGui.%s' % widget_class)
    return form_class, base_class
Пример #46
0
def get_pyside_class(ui_file):
    parsed = xml.parse(ui_file)
    widget_class = parsed.find('widget').get('class')
    form_class = parsed.find('class').text

    with open(ui_file, 'r') as f:
        o = StringIO()
        frame = {}

        pysideuic.compileUi(f, o, indent=0)
        pyc = compile(o.getvalue(), '<string>', 'exec')
        exec pyc in frame

        form_class = frame['Ui_{0}'.format(form_class)]
        base_class = eval('QtGui.{0}'.format(widget_class))

    return form_class, base_class
Пример #47
0
def compile_file(in_path, out_path):
    if not os.path.isfile(in_path):
        print('Warning: Skipping', in_path)
        return
    in_dir, in_name = os.path.split(in_path)
    out_dir, out_name = os.path.split(out_path)

    print('Compiling:', in_name, '->', out_name)
    try:
        f = open(out_path, 'w')
        compileUi(in_path, f, False, 4, False)
        f.close()
    except Exception as e:
        print('Warning: File did not compile, %r' % in_path)
        # print e
        raise
    return
Пример #48
0
def load_ui_type(filename):
  """Loads and parses ui file created by Qt Designer"""
  xml = ElementTree.parse(filename)
  # pylint: disable=no-member
  form_class = xml.find('class').text

  with open(filename, 'r') as ui_file:
    output_stream = StringIO()
    frame = {}

    pysideuic.compileUi(ui_file, output_stream, indent=0)
    compiled = compile(output_stream.getvalue(), '<string>', 'exec')
    # pylint: disable=exec-used
    exec compiled in frame

    form_class = frame['Ui_%s'%form_class]

  return form_class
Пример #49
0
    def initUI(self):

        fileName = QtGui.QFileDialog.getOpenFileName(self, 'Open UI File',
                                                     '../..', 'UI File (*.ui)')
        if fileName:
            uiFile = open(fileName[0], 'r')

            parentdir = os.path.abspath(os.path.join(fileName[0], os.pardir))
            filename = os.path.basename(os.path.splitext(fileName[0])[0])

            pyFile = open(os.path.join(parentdir, filename) + '.py', 'w')

            pysideuic.compileUi(uiFile, pyFile)

            uiFile.close()
            pyFile.close()

        sys.exit(0)
Пример #50
0
def _load_ui_type(filename):
    """Loads and parses ui file created by Qt Designer"""
    xml = ElementTree.parse(filename)
    # pylint: disable=no-member
    form_class = xml.find('class').text

    with open(filename, 'r') as ui_file:
        output_stream = StringIO()
        frame = {}

        pysideuic.compileUi(ui_file, output_stream, indent=0)
        compiled = compile(output_stream.getvalue(), '<string>', 'exec')
        # pylint: disable=exec-used
        exec compiled in frame

        form_class = frame['Ui_%s' % form_class]

    return form_class
Пример #51
0
def LoadUiType(uiFile):
	# LoadUiType only accept ascii encoding chars
	uiFile = str(uiFile)
	parsed = exml.parse(uiFile)
	widget_class = parsed.find('widget').get('class')
	ui_class_name = parsed.find('class').text
	with open(uiFile, 'r') as f:
		o = BytesIO()
		frame = {}
		pysideuic.compileUi(f, o)
		pyc = compile(o.getvalue(), '<string>', 'exec')
		exec pyc in frame
		ui_class = frame['Ui_%s' % ui_class_name]
		print str(ui_class)
		base_class = eval(widget_class)
		print str(base_class)

	return ui_class, base_class
Пример #52
0
    def initUI(self):

        fileName = QtGui.QFileDialog.getOpenFileName(self, 'Open UI File',
                                                     '../..', 'UI File (*.ui)')
        if fileName:
            uiFile = open(fileName[0], 'r')

            parentdir = os.path.abspath(os.path.join(fileName[0], os.pardir))
            filename = os.path.basename(os.path.splitext(fileName[0])[0])

            pyFile = open(os.path.join(parentdir, filename) + '.py', 'w')

            pysideuic.compileUi(uiFile, pyFile)

            uiFile.close()
            pyFile.close()

        sys.exit(0)
Пример #53
0
def loadUiType( uiFile ):
    if default ==  "pyqt4":
        form_class, base_class =  uic.loadUiType( uiFile )
    else:
        parsed = xml.parse( uiFile )
        widget_class = parsed.find( 'widget' ).get( 'class' )
        form_class = parsed.find( 'class' ).text

        with open( uiFile, 'r' ) as f:
            o = StringIO()
            frame = {}

            pysideuic.compileUi( f, o, indent=0 )
            pyc = compile( o.getvalue(), '<string>', 'exec' )
            exec pyc in frame

            form_class = frame[ 'Ui_%s'%form_class ]
            base_class = eval( '%s'%widget_class )
    return form_class, base_class
Пример #54
0
	def loadUiType(self):
		parsed = xml.parse(self.uiFile)
		widget_class = parsed.find('widget').get('class')
		form_class = parsed.find('class').text

		with open(self.uiFile, 'r') as f:
			o = StringIO()
			frame = {}

			
			pysideuic.compileUi(f, o, indent=0)
			pyc = compile(o.getvalue(), '<string>', 'exec')
			exec pyc in frame

			#Fetch the base_class and form class based on their type in the xml from designer
			self.form_class = frame['Ui_%s'%form_class]
			self.base_class = eval('QtGui.%s'%widget_class)

		return self.form_class, self.base_class
Пример #55
0
def loadUiType(uiFile):
    """
    Pablo Winant
    """
    parsed = xml.parse(uiFile)
    widget_class = parsed.find('widget').get('class')
    form_class = parsed.find('class').text
    
    with open(uiFile, 'r') as f:
        o = StringIO()
        frame = {}
        
        pysideuic.compileUi(f, o, indent=0)
        pyc = compile(o.getvalue(), '<string>', 'exec')
        exec pyc in frame
        
        form_class = frame['Ui_%s'%form_class]
        base_class = eval('QtGui.%s'%widget_class)
    return form_class, base_class
Пример #56
0
def load_ui_type(uifile):
    """Pyside equivalent for the loadUiType function in PyQt.

    From the PyQt4 documentation:
        Load a Qt Designer .ui file and return a tuple of the generated form
        class and the Qt base class. These can then be used to create any
        number of instances of the user interface without having to parse the
        .ui file more than once.

    Note:
        Pyside lacks the "loadUiType" command, so we have to convert the ui
        file to py code in-memory first and then execute it in a special frame
        to retrieve the form_class.

    Args:
        uifile (str): Absolute path to .ui file


    Returns:
        tuple: the generated form class, the Qt base class
    """
    import pysideuic
    import xml.etree.ElementTree as ElementTree
    from cStringIO import StringIO

    parsed = ElementTree.parse(uifile)
    widget_class = parsed.find('widget').get('class')
    form_class = parsed.find('class').text

    with open(uifile, 'r') as f:
        o = StringIO()
        frame = {}

        pysideuic.compileUi(f, o, indent=0)
        pyc = compile(o.getvalue(), '<string>', 'exec')
        exec(pyc) in frame

        # Fetch the base_class and form class based on their type in
        # the xml from designer
        form_class = frame['Ui_%s' % form_class]
        base_class = eval('QtWidgets.%s' % widget_class)
    return form_class, base_class