Загрузка файлов .ui QtDesigner в PySide

Я ищу простой пример того, как напрямую загрузить сгенерированный QtDesigner файл .ui в приложение Python.

Я просто хотел бы избежать использования pyuic4.


person denysonique    schedule 22.08.2011    source источник


Ответы (4)


PySide, в отличие от PyQt, реализовал класс QUiLoader для прямого читать в файлах .ui. Из связанной документации,

loader = QUiLoader()
file = QFile(":/forms/myform.ui")
file.open(QFile.ReadOnly)
myWidget = loader.load(file, self)
file.close()
person Stephen Terry    schedule 22.08.2011
comment
Просто чтобы помочь новичкам: QUiLoader от PySide.QtUiTools.QUiLoader - person brews; 15.03.2013
comment
Все, что я получаю, это: QPixmap: Must construct a QApplication before a QPaintDevice Aborted (core dumped) - person Lucio; 02.06.2013
comment
@Lucio Фрагмент кода в этом ответе нельзя использовать изолированно. Следуйте ответу BarryPye для полного примера. - person JBentley; 06.05.2014

Для полных новичков в файлах PySide и .ui вот полный пример:

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_())
person BarryPye    schedule 17.08.2013
comment
Попробуйте это @Necronomicron - person all or None; 11.12.2014
comment
Как я могу получить доступ к виджетам пользовательского интерфейса после загрузки пользовательского интерфейса таким образом? - person texnic; 23.02.2019
comment
Нашел ответ здесь: window = loader.load('filename.ui', parent); my_widget = window.my_widget_name. - person texnic; 24.02.2019

Другой вариант, основанный на более короткой директиве загрузки, найден на https://askubuntu.com/questions/140740/should-i-use-pyqt-or-pyside-for-a-new-qt-project.#comment248297_141641. (В принципе, вы можете избежать открытия и закрытия всего этого файла.)

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_())

Примечания:

  • filename.ui должен находиться в той же папке, что и ваш файл .py.
  • Вы можете использовать if __name__ == "__main__":, как описано в ответе BarryPye
person lofidevops    schedule 26.01.2016
comment
Этот на самом деле работает с PySide2. Просто добавьте from PySide2.QtWidgets import QApplication - person texnic; 23.02.2019

Вот несколько примеров для PySide6 и Windows. (Для Linux вам нужно использовать /, а не \\)

from PySide6.QtUiTools import QUiLoader
from PySide6.QtCore import QFile
from PySide6.QtWidgets import QApplication
import sys

if __name__ == "__main__":
    app = QApplication(sys.argv)
    loader = QUiLoader()
    file = QFile("gui.ui")
    file.open(QFile.ReadOnly)
    ui = loader.load(file)
    file.close()
    ui.show()
    sys.exit(app.exec_())
person Emrexdy    schedule 25.03.2021