После того как мы создали интерфейс в Qt Designer, возникает следующий вопрос: как заставить его работать?
Сам файл .ui - это ещё не программа. Это описание нашего будущего окна: какие элементы в нём находятся, где они расположены, какие у них названия и свойства.
Нам нужен Python-файл, который:
запустит Python внутри Micromine;
найдёт наш файл интерфейса;
загрузит его;
покажет окно пользователю.
И для этого случая у нас есть main_app.py. Именно он будет точкой входа нашего скрипта - файлом, который пользователь будет запускать из Micromine.
Первый запуск
В нашем проекте файл main_app.py находится рядом с интерфейсом:
Для начала нам понадобятся библиотеки PySide6:
from PySide6.QtWidgets import QApplication
from PySide6.QtUiTools import QUiLoader
from PySide6.QtCore import QFile
PySide6 позволяет Python работать с графическим интерфейсом Qt.
Но есть одна проблема.
Если запустить Python через VS Code, он обычно знает, где находится запущенный файл. А Micromine использует собственный внутренний интерпретатор Python, поэтому нам нужно явно указать Python папку, в которой находится наш скрипт.
Для этого используем следующи строки, размещаем их в самом начале main_app.py:
import os
import sys
from pathlib import Path
Затем идут 3 строки для библиотеки Pyside6, и в самом конце:
Здесь пока не обязательно понимать каждую функцию. Нам важно другое: в переменной script_path мы получаем путь к папке нашего проекта, а затем добавляем эту папку в sys.path.
Другими словами, мы говорим Python, чтобы он искал наши файлы (в том числе main_window.ui) именно там, где мы ему скажем.
Запускаем Qt
Теперь создаём приложение:
app = QApplication.instance()
if app is None:
app = QApplication()
Сначала мы проверяем, существует ли уже объект QApplication. Если его нет - создаём. Это связано с тем, что наш скрипт запускается внутри Micromine, где Qt-приложение уже может существовать.
Данная часть кода позволяет перевести интерфейс в объект, с которым уже сможет работать Python. Например, дальше мы можем написать window.lineEdit и обратиться к конкретному элементу нашего интерфейса. К примеру, обратиться к полю выбора основания склада.
Последние две строки, которые нужно написать – это window.show() и app.exec(), где первая показывает окно, а вторая запускает цикл обработки событий Qt, благодаря которому интерфейс продолжит реагировать на действия пользователя: нажатия кнопок, ввод текста и т.д.
Результат main_app.py должен быть такой:
Диалоговое окно открывается, но не откликается на действия пользователя. В следующих частях научим его отзываться на действия пользователя.