Spec-Zone.ru › Qt

Использование файла пользовательского интерфейса дизайнера в вашем приложении Qt для Python

Преобразование формы в код Python

Для демонстрации мы используем пример анимации сглаживания виджетов Qt.

Приложение состоит из одного исходного файла, easing.py, файла пользовательского интерфейса form.ui, файла ресурсов easing.qrc и файла проекта easing.pyproject в формате YAML:

{
    "files": ["easing.qrc", "ui_form.py", "easing.py", "easing_rc.py",
              "form.ui"]
}

Файл пользовательского интерфейса преобразуется в код Python, создающий форму, с помощью компилятора пользовательского интерфейса (uic):

uic -g python form.ui > ui_form.py

Поскольку виджет верхнего уровня называется Form, в результате генерируется класс Python с именем Ui_Form. Он предоставляет функцию setupUi(), принимающую виджет в качестве параметра, которая вызывается для создания элементов пользовательского интерфейса:

from ui_form import Ui_Form
...
class Window(QtWidgets.QWidget):
    def __init__(self, parent=None):
        super(Window, self).__init__(parent)

        self.m_ui = Ui_Form()
        self.m_ui.setupUi(self)

Позже к виджетам можно получить доступ через класс Ui_Form:

self.m_ui.graphicsView.setScene(self.m_scene)

Помимо setupUi(), Ui_Form предоставляет другой метод retranslateUi(), который можно вызывать в ответ на событие QEvent типа QEvent.LanguageChange, указывающее на изменение языка приложения.

Подход UiTools

Класс QUiLoader предоставляет объект загрузчика формы для построения пользовательского интерфейса во время выполнения. Этот пользовательский интерфейс можно получить из любого QIODevice, например, из объекта QFile. Функция QUiLoader::load() строит виджет формы, используя описание пользовательского интерфейса, содержащееся в файле.

Это демонстрируется примером uiloader:

from PySide2.QtUiTools import QUiLoader

if __name__ == '__main__':
    # Some code to obtain the form file name, ui_file_name
    app = QApplication(sys.argv)
    ui_file = QFile(ui_file_name)
    if not ui_file.open(QIODevice.ReadOnly):
        print("Cannot open {}: {}".format(ui_file_name, ui_file.errorString()))
        sys.exit(-1)
    loader = QUiLoader()
    widget = loader.load(ui_file, None)
    ui_file.close()
    if not widget:
        print(loader.errorString())
        sys.exit(-1)
    widget.show()
    sys.exit(app.exec_())

© The Qt Company Ltd
Licensed under the GNU Free Documentation License, Version 1.3.
https://doc.qt.io/qt-6.2/designer-using-a-ui-file-python.html

Spec-Zone.ru

Настройки Оффлайн Что нового Помощь О нас
Spec-Zone .ru
спецификации, руководства, описания, API