2011-08-22 27 views

Respuesta

33

PySide, a diferencia de PyQt, ha implementado la clase QUiLoader para leer directamente en archivos .ui. De la documentación vinculada,

loader = QUiLoader() 
file = QFile(":/forms/myform.ui") 
file.open(QFile.ReadOnly) 
myWidget = loader.load(file, self) 
file.close() 
+15

Sólo para ayudar a noobs a lo largo de: QUiLoader es de 'PySide.QtUiTools.QUiLoader' – brews

+0

Todo lo que consigo es la siguiente:' QPixmap: Debe construir un QApplication antes de una QPaintDevice Aborted (core dumped) ' – Lucio

+1

@Lucio El fragmento de código en esta respuesta no se puede usar de forma aislada. Sigue la respuesta de BarryPye para un ejemplo completo. – JBentley

36

Para los noobs completos en PySide y archivos .ui, aquí es un ejemplo completo:

from PySide import QtCore, QtGui, QtUiTools 


def loadUiWidget(uifilename, parent=None): 
    loader = QtUiTools.QUiLoader() 
    uifile = QtCore.QFile(uifilename) 
    uifile.open(QtCore.QFile.ReadOnly) 
    ui = loader.load(uifile, parent) 
    uifile.close() 
    return ui 


if __name__ == "__main__": 
    import sys 
    app = QtGui.QApplication(sys.argv) 
    MainWindow = loadUiWidget(":/forms/myform.ui") 
    MainWindow.show() 
    sys.exit(app.exec_()) 
+0

Muchas gracias –

+0

Pruebe esto @Necronomicron – 101

2

Otra variante, basado en una directiva de carga más corto, que se encuentra en https://askubuntu.com/questions/140740/should-i-use-pyqt-or-pyside-for-a-new-qt-project#comment248297_141641 . (Básicamente, puede evitar todo lo que la apertura y cierre de archivos.)

import sys 
from PySide import QtUiTools 
from PySide.QtGui import * 

app = QApplication(sys.argv) 
window = QtUiTools.QUiLoader().load("filename.ui") 
window.show() 
sys.exit(app.exec_()) 

Notas:

  • filename.ui debe estar en la misma carpeta que el archivo .py.
  • Es posible que desee utilizar if __name__ == "__main__": como se indica en BarryPye's answer
Cuestiones relacionadas