¿Cómo puedo generar código python desde un archivo QtDesigner? Encontré pyside-uic pero no puedo encontrar un ejemplo para la sintaxis. Ejecuto win7 y pythonxy con spyder.Generación de código Python con pyside-uic
Respuesta
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.
clase QUiLoader hará el trabajo sin hacer un archivo intermedio.
http://www.pyside.org/docs/pyside/PySide/QtUiTools/QUiLoader.html
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
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
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
pyside-uic.exe MyWindow.ui -o MyWindow.py
es lo que he estado haciendo y está funcionando bien (hasta donde yo sé)
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 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
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
El uso de QtUiTools (como se sugiere en otra respuesta) actualmente no está recomendado por el equipo de PySide.
Lea la historia completa aquí: https://groups.google.com/forum/?fromgroups=#!topic/pyside/_s1HPe6XTZs
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
¿de dónde tomó pysideuic? Porque no está en el paquete PySide. – Romulus
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
[lector de página man hombre] (https://stackoverflow.com/a/944571/984421) – ekhumoro
- 1. Generación de código C++ con Python
- 2. Generación de código con Scala
- 3. Xcode generación de código
- 4. Generación de código Java
- 5. Generación de código dinámico
- 6. Generación/síntesis de sonido con python?
- 7. Generación de código en Maven
- 8. generación de código Java JPA
- 9. generación de código en Clojure
- 10. HDF5 C Generación de código
- 11. Generación de código usando .net
- 12. python: generación de particiones enteras
- 13. Generador de código Python
- 14. Herramienta de generación de código C#
- 15. Integrar generación de código con eclipse C++ compilación
- 16. std :: vector para la generación de código java.util.Vector con trago
- 17. Generación de código: plantillas de controlador personalizado
- 18. Python itertools.product reordenar la generación
- 19. Generación de código para composición usando Eclipse
- 20. Generación de perfiles de código PHP
- 21. Técnicas de generación de código JIT
- 22. Generación de rangos de color en Python
- 23. Generación de código para iOS y Android
- 24. Generación de código objeto repetible C++
- 25. Generación de código QR en ASP.NET MVC
- 26. Generación de código C# en .NET 4
- 27. Generación de documentos HTML en python
- 28. Generación de enlaces SWIG con CMake
- 29. Ejecutando código ensamblador con python
- 30. Creación de métodos dinámicos/en tiempo de ejecución (generación de código) en Python
Gracias, PySide parece funcionar como PyQt – ArtDijk
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