for examples python pyside

examples - qt for python



Generación de código Python con pyside-uic (8)

Acabo de probar el QUILoader de Pyside, 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_()

Utilicé Eclipse y QTDesigner para crear el archivo .ui (haga clic con el botón derecho en el módulo, "Nuevo -> Otro ...", elija "Qt Designer -> Qt Designer Form"). No se necesita una llamada uic explícita.

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




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.


Mire C: / Python27 / Lib / site-packages / PySide / scripts / uic.py (o donde sea que tenga Python instalado). Si observa ese script, puede ver las opciones etiquetadas y descritas como en la página de manual (que no sé cómo ver correctamente en Windows. Se agradecen las sugerencias) aquí http://manpages.ubuntu.com/manpages/precise/man1/pyside-uic.1.html

Me confundí por un tiempo tratando de ver C: / Python27 / Lib / site-packages / pysideuic / pyside-uic.1 ya que pensé que ese debe ser el archivo al que se llama. Incluso tratar de ver eso como una página de manual es imposible para mí debido a todos los caracteres adicionales. ¡No puedes aprender la sintaxis intentando 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 anteriormente (a continuación como referencia) con la extensión .bat como uic_generator.bat.

pyside-uic MyWindow.ui -o MyWindow.py


pyside-uic es más o menos idéntico a pyuic4, como tal, la página de 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)

Normalmente lo uso así:

pyside-uic -o output.py input.ui


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 usar esta forma para cargar la interfaz de usuario y también puede obtener form_class así como la clase base como tipo de retorno ... pero si no desea convertir, de lo contrario, sí, la siguiente es la forma correcta.

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


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

es lo que he estado haciendo y está funcionando bien (que yo sepa)