Шаг 7.
Библиотека PyQt5. Знакомство с PyQt5. Создание окна с помощью программы Qt Designer. Загрузка ui-файла в программе

    На этом шаге мы рассмотрим различные способы загрузки этого файла.

    Как вы можете убедиться, внутри ui-файла содержится текст в XML-формате, а не программный код на языке Python. Следовательно, подключить файл с помощью инструкции import не получится. Чтобы использовать ui-файл внутри программы, следует воспользоваться модулем uic, который входит в состав библиотеки PyQt. Прежде чем использовать функции из этого модуля, необходимо подключить модуль с помощью инструкции:

  from PyQt5  import uic

    Для загрузки ui-файла предназначена функция loadUi(). Формат функции:

  loadUi (<ui-файл>[, <Экземпляр класса>] )

    Если второй параметр не указан, функция возвращает ссылку на объект формы. С помощью этой ссылки можно получить доступ к компонентам формы и, например, назначить обработчики сигналов. Имена компонентов задаются в программе Qt Designer в свойстве objectName.

# -*- coding: utf-8 -*-
from PyQt5 import QtWidgets, uic
import sys
app = QtWidgets.QApplication(sys.argv)
window = uic.loadUi("MyForm.ui")
window.btnQuit.clicked.connect(app.quit)
window.show()
sys.exit(app.exec_())
Архив с файлами можно взять здесь.

    Если во втором параметре указать ссылку на экземпляр класса, то все компоненты формы будут доступны через указатель self .

# -*- coding: utf-8 -*-
from PyQt5 import QtWidgets, uic
class MyWindow(QtWidgets.QWidget):
    def __init__ (self, parent=None):
        QtWidgets.QWidget.__init__(self, parent)
        uic.loadUi("MyForm.ui", self)
        self.btnQuit.clicked.connect(QtWidgets.qApp.quit)

if __name__ == "__main__":
    import sys
    app = QtWidgets.QApplication(sys.argv)
    window = MyWindow()
    window.show()
    sys.exit(app.exec_())
Архив с файлами можно взять здесь.

    Загрузить ui-файл позволяет также функция loadUiType() - она возвращает кортеж из двух элементов: ссылки на класс формы и ссылки на базовый класс. Так как функция возвращает ссылку на класс, а не на экземпляр класса, мы можем создать множество экземпляров класса. После создания экземпляра класса формы необходимо вызвать метод setupUi() и передать ему указатель self.

# -*- coding: utf-8 -*-
from PyQt5 import QtWidgets, uic
class MyWindow(QtWidgets.QWidget):
    def __init__ (self, parent = None):
        QtWidgets.QWidget.__init__(self, parent)
        Form, Base = uic.loadUiType("MyForm.ui")
        self.ui = Form()
        self.ui.setupUi(self)
        self.ui.btnQuit.clicked.connect(QtWidgets.qApp.quit)

if __name__ == "__main__":
    import sys
    app = QtWidgets.QApplication(sys.argv)
    window = MyWindow()
    window.show()
    sys.exit(app.exec_())
Архив с файлами можно взять здесь.

    Загрузить ui-файл можно и вне класса, после чего указать класс формы во втором параметре в списке наследования, - в этом случае наш класс унаследует все методы класса формы.

# -*- coding: utf-8 -*-
from PyQt5 import QtWidgets, uic

Form, Base = uic.loadUiType("MyForm.ui")
class MyWindow(QtWidgets.QWidget, Form):
    def __init__(self, parent = None):
        QtWidgets.QWidget.__init__(self, parent)
        self.setupUi(self)
        self.btnQuit.clicked.connect(QtWidgets.qApp.quit)

if __name__ == "__main__":
    import sys
    app = QtWidgets.QApplication(sys.argv)
    window = MyWindow()
    window.show()
    sys.exit(app.exec_())
Архив с файлами можно взять здесь.

    Результат работы этих приложений приведен на рисунке 1.


Рис.1. Результат работы этих приложений

    На следующем шаге мы рассмотрим преобразование ui-файла в py-файл.




Предыдущий шаг Содержание Следующий шаг