Преобразование GUI-приложения в .exe-файл с помощью cx_Freeze: плагин для инструментария qt4 не найден - PullRequest
0 голосов
/ 12 октября 2018

Моя программа содержит элементы mayavi, traits и pyqt5 для визуализации чего-либо в 3D.Я попытался преобразовать мое GUI-приложение с помощью cx_Freeze, и оно создало exe-файл, но, запустив его, я получил ошибку:

no traitsui.toolkits plugin found for toolkit qt4

После некоторых исследований Google и StackOverflow я выяснил, что оно может что-тосделать со своей средой: см. создание автономного exe-файла с использованием pyinstaller с помощью import mayavi

В соответствии с предложениями в дальнейшем исследовании Google, я добавил эти строки в начало моего кода:

import imp
try:
    imp.find_module('pyside') # test if PySide if available
except ImportError:
    os.environ['QT_API'] = 'pyqt' # signal to pyface that PyQt4 should be used

После обсуждения в потоке stackoverflow я заканчиваю тем, что загружаю исполняемый файл "Jannick".Затем я удалил строку в своем коде, которая отвечает за добавление сцены майави в графический интерфейс пользователя (для целей тестирования):

    self.ui = Visualization().edit_traits(parent=self,
                                           kind='subpanel').control

Visualization () - это класс, в котором я выполняю фактическую визуализацию с помощью Mayavi ..Затем я выполнил cx_Freeze, мой setup.py:

import sys
import os
os.environ['TCL_LIBRARY'] = "C:\\Users\\Albo\Anaconda3\\tcl\\tcl8.6"
os.environ['TK_LIBRARY'] = "C:\\Users\\Albo\Anaconda3\\tcl\\tk8.6"
from cx_Freeze import setup, Executable
import cx_Freeze.hooks

build_exe_options = {"packages": ['pygments.lexers', 'tvtk.pyface.ui.qt4','pkg_resources._vendor',
                    'mayavi', 'traits', 'traitsui', 'sip',
                    'traitlets','tvtk.vtk_module','traits.api','traitsui.api','os','gui','gui.gui_mayavi', 'tvtk.vtk_module',
                                  'pyface.qt','pyface.qt.QtGui','pyface.qt.QtCore','numpy'],
                     "includes":['gui','gui.gui_mayavi','mayavi','PyQt5'],
                    }


executables = [
    Executable('main.py', targetName='main.exe',base = 'Win32GUI',)
]

setup(name='main',
      version='1.0',
      description='',
      executables=executables,
      options={"build_exe":build_exe_options},
      )

Теперь у меня появилась новая ошибка:

RuntimeError: No pyface.toolkits plugin found for toolkit qt4

Теперь произошло нечто странное ... Я скопировал с"Jannick" спроектировал папку pyface и заменил ее в моей сборке (которая была создана из cx_Freeze).Мой exe-файл работал без проблем!Я был очень счастлив, и я подумал, хорошо, я просто добавляю строку, которая предназначена для визуализации, а затем снова копирую папку pyface, и она запускается.Но теперь я снова получаю ошибку, которую совсем не могу понять:

  File "C:\Users\xxx\Desktop\xxx\xxx\xxx.py", line 300, in initUI
    rightlayout.addWidget(self.ui)
TypeError: addWidget(self, QWidget, stretch: int = 0, alignment: Union[Qt.Alignment, Qt.AlignmentFlag] = Qt.Alignment()): argument 1 has unexpected type 'PySide.QtGui.QWidget'

Я также понял, что не могу запустить скрипт из консоли, но из spyder это не проблема.Я думаю, что это все еще как-то связано со средой, потому что, если я удаляю строки в верхней части кода, он снова работает ...

...