Использование файла пользовательского интерфейса в вашем приложении Qt для Python
Преобразование формы в код Python
Для демонстрации мы используем пример анимации сглаживания Qt Widgets.
Приложение состоит из одного исходного файла, 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-5.15/designer-using-a-ui-file-python.html