Задать вопрос
@Nickolashaa
Студент МГТУ СТАНКИН программная инженерия

Почему pyinstaller не видит uic файл?

Хочу конвертировать свою GUI приложение, написанное на PyQt6 в exe файл. Дизайн создаван в QTDesigner и сохранен в виду ui файла. Для конвертации я использовал pyinstaller и задавал следующий запрос pyinstaller --onedir --noconsole --icon=app/ui/pic/favicon.ico main.py В итоге exe файл и открытии выдает ошибку о том, что не может найти ui файл в его директории, хотя он там есть. Добавил файл через datas в main.spec - без изменений. Загрузил uic через
```
template = """содержимое uic"""
uic.LoadUi(io.stringIO(template))
```
приложение запустилось, однако сложные элементы дизайна, например qpixmap, не прогрузились
  • Вопрос задан
  • 43 просмотра
Подписаться 1 Средний Комментировать
Пригласить эксперта
Ответы на вопрос 1
@mc92
Если правильно понял суть проблемы, то:
Вам нужно изменить подход к использованию ui.
Все исходные файлы из qtdesigner нужно перевести в формат .py

Ресурсы
В папку со всеми окнами располагаем ресурсы
`.qrc -> .py`
pyrcc6 res/resources.qrc -o src/gui/windows/ui/resources_rc.py; \

Интерфейс
`.ui -> .py`
pyuic6  --from-imports res/ui/main.ui -o src/gui/windows/ui/main.py; \

--from-imports - в файле ресурсов .py сделает импорт from . import resources_rc, т.е. подхватит ранее созданные в этом каталоге файл ресурсов

ресурсы + интерфейс в 1 команду

pyrcc6 res/resources.qrc -o src/gui/windows/ui/resources_rc.py; \
pyuic6 --from-imports res/ui/main.ui -o src/gui/windows/ui/main.py; \
pyuic6 --from-imports res/ui/sub.ui -o src/gui/windows/ui/sub.py;


Класс окна (на примере главного)
from PyQt6.QtWidgets import QMainWindow
from .ui.main import Ui_MainWindow

class MainWindow(QMainWindow, Ui_MainWindow):
    def __init__(self):
        super().__init__()
        self.setupUi(self)

для PySide6

заменить:
pyrcc6 на pyside6-rcc
pyuic6 на pyside6-uic

Таким образом мы перевели файлы ресурсов и шаблонов в .py формат, инициировали их в нашем классе (MainWindow).

Теперь, при сборке, pyinstaller пройдется по всем импортам, включая ресурсы и интерфейсы, и добавит их себе.

Еще можете обратить внимание на библиотеку nuitka для создания exe файлов и не только.
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы