2010-12-14 32 views

Respuesta

1

Lea la documentación. En este caso particular, http://www.riverbankcomputing.co.uk/static/Docs/PyQt4/pyqt4ref.html#pyuic4:

The pyuic4 utility is a command line interface to the uic module. The command has the following syntax: 

pyuic4 [options] .ui-file 

The full set of command line options is: 
-h, --help A help message is written to stdout. 
--version The version number is written to stdout. 
-i N, --indent=N 
    The Python code is generated using an indentation of N spaces. If N is 0 then a tab is used. The default is 4. 
-o FILE, --output=FILE 
    The Python code generated is written to the file FILE. 
-p, --preview The GUI is created dynamically and displayed. No Python code is generated. 
-w, --pyqt3-wrapper 
    The generated Python code includes a small wrapper that allows the GUI to be used in the same way as it is used in PyQt v3. 
-x, --execute The generated Python code includes a small amount of additional code that creates and displays the GUI when it is executes as a standalone application. 
--from-imports Resource modules are imported using from . import rather than a simple import. 
+2

Gracias, PySide parece funcionar como PyQt – ArtDijk

+1

D'oh! Perdí por completo el bit de PySide. Afortunadamente, PyQt4 hizo muchas cosas bien, por lo que PySide no tuvo que cambiar mucho :) – delnan

30

PySide-UIC es más o menos idéntica a pyuic4, como tal, la página del manual especifica:

Usage: 
     pyside-uic [options] <ui-file> 

Options: 
    --version 
     show program's version number and exit 

    -h,--help 
     show this help message and exit 

    -oFILE,--output=FILE 
     write generated code to FILE instead of stdout 

    -x,--execute 
     generate extra code to test and display the class 

    -d,--debug 
     show debug output 

    -iN,--ident=N 
     set indent width to N spaces, tab if N is 0 (default: 4) 

lo general el uso de esta manera:

pyside-uic -o output.py input.ui 
+1

Normalmente lo uso así (en Windows): 'pyside-uic.exe nombre_archivo_útil.ui> nombre_archivo_útil_ui.py' Entonces puedo hacer un seguimiento utilizando esta sencilla convención de nomenclatura. En el futuro espero no usar esto más, sino utilizar la clase QUILoader (ver @Sven a continuación) ... – Neon22

+0

Prefiero crear el código UI a través de pyside-uic vs usar un cargador porque ** 1st **: con el diseñador y el código xml nunca se sabe cómo se distribuye el material. Así que sigues luchando para codificar Qt tú mismo de forma dinámica. ** 2nd **: compilar para py pyc ocurre una vez hasta que cambias el ui no cada vez que disparas tu script. ** 3er **: evita una gran complejidad de su código. ¡Es 'importación' frente a todo este material del cargador! Sé que ya no es una cuestión de tiempo, pero siempre siento ganas de gastar mucho al "cargar" el xml. – ewerybody

4
pyside-uic.exe MyWindow.ui -o MyWindow.py 

es lo que he estado haciendo y está funcionando bien (hasta donde yo sé)

19

Sólo probamos de PySide QUILoader, funciona bien:

from PySide import QtGui 
from PySide import QtCore 
from PySide import QtUiTools 

class MyWidget(QtGui.QMainWindow): 
    def __init__(self, *args): 
     apply(QtGui.QMainWindow.__init__, (self,) + args) 

     loader = QtUiTools.QUiLoader() 
     file = QtCore.QFile("pyside_ui_qtdesigner_form_test.ui") 
     file.open(QtCore.QFile.ReadOnly) 
     self.myWidget = loader.load(file, self) 
     file.close() 

     self.setCentralWidget(self.myWidget) 

if __name__ == '__main__': 
    import sys 
    import os 
    print("Running in " + os.getcwd() + " .\n") 

    app = QtGui.QApplication(sys.argv) 

    win = MyWidget() 
    win.show() 

    app.connect(app, QtCore.SIGNAL("lastWindowClosed()"), 
       app, QtCore.SLOT("quit()")) 
    app.exec_() 

Solía ​​Eclipse y QtDesigner para crear el archivo .ui (botón derecho del ratón en el módulo "Nuevo -> Otros ..", seleccione "Qt Designer - > Formulario Qt Designer "). No se necesita una llamada uic explícita.

+1

+1 para proporcionar un buen ejemplo completo. Sin embargo, con esta 1 cosa que estaba atascado, QFile dirige al directorio superior del paquete para la ruta del archivo, no al directorio donde reside este código. Solo para alguien que se queda atascado en el futuro. – IsaacS

+3

El problema es que loader.load devuelve un objeto. Pero en uic, obtenemos una clase, luego podemos subclasificar la clase de acuerdo a nuestras necesidades. Pero en loader.load siempre devuelve un objeto instanciado para que no haya subclases ni personalizaciones. Incluso no puede cargar un widget personalizado: consulte este error: https://bugreports.qt-project.org/browse/PYSIDE-77 – Sarim

5
import pysideuic 
import xml.etree.ElementTree as xml 
from cStringIO import StringIO 

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. 
    """ 
    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 

Puede utilizar esta forma de cargar la interfaz de usuario y también se puede obtener form_class, así como la clase base como tipo de retorno ... pero si usted no quiere para convertir, de lo contrario, sí, la siguiente es la forma correcta.

pyside-uic.exe MyWindow.ui -o MyWindow.py 
+0

¿de dónde tomó pysideuic? Porque no está en el paquete PySide. – Romulus

0

mirada a C: \ python27 \ Lib \ site-packages \ PySide \ scripts \ uic.py (o donde haya instalado Python). Si miras ese script puedes ver las opciones etiquetadas y descritas como en la página man (que no sé cómo ver correctamente en Windows. Sugerencias apreciadas.) Aquí http://manpages.ubuntu.com/manpages/precise/man1/pyside-uic.1.html

Me confundí por un tiempo tratando para ver C: \ Python27 \ Lib \ site-packages \ pysideuic \ pyside-uic.1, ya que pensé que ese debe ser el archivo que se está llamando. Incluso tratando de ver eso como una página de manual es imposible para mí debido a todos los caracteres adicionales. ¡No puede aprender la sintaxis al intentar adivinar qué caracteres son extra y cuáles no!

En Windows puede automatizar esto con un archivo por lotes, por supuesto guardando un archivo de texto con la línea mencionada (a modo de referencia) con extensión .bat como uic_generator.bat.

MyWindow.ui PySide-UIC -O MyWindow.py

+0

[lector de página man hombre] (https://stackoverflow.com/a/944571/984421) – ekhumoro