Quarter: designer -> uic -> python

Вид главного окна

В статье демонстрируется встраивание виджета визуализации QuarterWidget в PySide2 приложение на основе формы подготовленной в Qt Designer.

Программное обеспечение

При разработке программы воспользуемся дистрибутивом MSYS2 (необходимо установить), который предполагает работу в командной строке.

Для запуска командной строки, используйте ярлык Пуск → MSYS2 64bit → MSYS2 MinGW 64-bit.

После установки, диструбутив необходимо обновить командой:

$ pacman -Syuu

Команда установки необходимых зависимостей:

$ pacman -S make mingw-w64-x86_64-qt5-tools mingw-w64-x86_64-pyside2-qt5 mingw-w64-x86_64-quarter mingw-w64-x86_64-python-pivy

Файловая система

Для работы над программой, создайте папку (например: quarter-designer-python).

Измените текущую папку в командной строке:

$ cd "полный/путь/к/quarter-designer-python"

Обратите внимание, что в качастве разделителя используется символ / (это важно).

Файлы, которые будете скачивать далее, сохраняйте в этой папке.

Интерфейс главного окна

Описание интерфейса будующей программы представлено в файле MainWindow.ui (необходимо скачать).

Файл интерфейса можно просматривать и редактировать командой:

$ designer MainWindow.ui

В теории, из файла интерфейса генерируется модуль Ui_MainWindow.py запуском команды:

$ uic -g python -o Ui_MainWindow.py MainWindow.ui

Но это только в теории. На момент написания этой статьи, команда uic не выдает инструкции импорта для сторониих виджетов при использовании python генератора.

Для обхода этого ограничения, подготовлен Makefile (необходимо скачать) c описанием правила сборки:

Ui_MainWindow.py: MainWindow.ui
	echo "from pivy.quarter import QuarterWidget as SIM_Coin3D_Quarter_QuarterWidget" > $@
	uic -g python $< >> $@

Для получения модуля интерфейса, просто выполните команду:

$ make

Инициализация интерфейса и загрузка геометрии

Код программы MainWindow.pyw (необходимо скачать):

import sys

from PySide2.QtWidgets import QApplication, QMainWindow
from Ui_MainWindow import Ui_MainWindow

from pivy.coin import SoInput, SoDB

class MainWindow(QMainWindow):
    def __init__(self):
        super(MainWindow, self).__init__()
        self.initGUI()
        self.initCSG()

    def initGUI(self):
        self.ui = Ui_MainWindow()
        self.ui.setupUi(self)

    def initCSG(self):
        input = SoInput()
        input.openFile("CSG.wrl")
        graph = SoDB.readAll(input)
        input.closeFile()
        self.ui.quarterWidget.setSceneGraph(graph)

if __name__ == "__main__":
    app = QApplication(sys.argv)

    window = MainWindow()
    window.show()

    sys.exit(app.exec_())

Для правильной работы программы потребуется файл геометрии CSG.wrl (необходимо скачать).

Код программы можно просматривать и редактировать командой:

$ idle MainWindow.pyw

Используйте клавишу F5 или пункт меню Run → Run Module для запуска программы из редактора.