使用 PyInstaller 创建的 .exe 文件不显示其 GUI

Posted

技术标签:

【中文标题】使用 PyInstaller 创建的 .exe 文件不显示其 GUI【英文标题】:.exe file created with PyInstaller does not show its GUI 【发布时间】:2018-01-04 21:48:56 【问题描述】:

我编写了一个密码生成器,并使用 PyQt5 设计器为它构建了一个 GUI。该脚本在其发起程序中调用 .ui,并且两者都在同一个文件夹中。

def __init__(self, parent=None):
    super().__init__(parent)
    self.ui = uic.loadUi('Generator.ui', self)

但是,通过 PyInstaller 将两者都转换为 .exe 文件后,从其 dist 文件夹中提取 .exe 文件并执行后,控制台会立即弹出并关闭,而不显示 GUI。

如何在不手动将 .ui 代码添加到 Generator.py 脚本的情况下解决此问题??

谢谢

【问题讨论】:

如果您在命令提示符下运行可执行文件,您可以捕获错误,然后人们可能会提供解决方案。我的第一个猜测是 .ui 文件的路径有问题。您是否将其明确包含在您的可执行文件中? 您可以使用 pyuic 工具将 .ui 文件制作成 .py 文件,然后将创建的 Ui_whatever 类子类化到您的 GUI 类中。这与您发布的方法不同,但我在许多使用 pyinstaller 创建的应用程序中都使用了这种方法。 @Eric 如何在可执行路径中包含 .ui 文件?我只是使用'pyinstaller.exe --onefile Generator.py' @MalloyDelacroix 我也会尝试这种方法。所以只需将.ui文件转换为.py文件,然后在主脚本中导入生成的.py,然后我将其转换为.exe? 基本上。在创建的 .py 文件中,将生成一个类,其名称与您在 QtDesigner 中命名的小部件的名称相同。导入此类并将其子类化。 【参考方案1】:

我将此作为答案显示,我可以展示一个示例。使用 pyuic 工具将 .ui 文件转换为 .py 文件。此创建的 .py 文件中将包含一个类,该类是 Qt Designer 中构建的小部件的名称。将此类导入并子类化到您正在创建的 GUI 类中。

from designer_file import Ui_Gui  # Designer file is the converted .ui file and Ui_Gui is the ui class it created

class GUIWindow(QtWidgets.QWidget, Ui_Gui):

    def __init__(self):
        QtWidgets.QWidget.__init__(self)
        self.setupUi(self)  # This is necessary to setup the ui when using this method
        # Code here...

【讨论】:

很抱歉,我似乎被卡住了。如果我尝试这个解决方案,PyCharm 会告诉我 Unresolved reference 'py' 而且,如果我导入 GUI 文件,Generator.exe 是否会立即工作生成,导致 GUI.py 不是标准库的一部分? 对不起,我的错误。从 Designer_file.py 中删除 .py。是的,它应该在生成后立即工作。 Pyinstaller 搜索每个文件中的导入并提取几乎所需的所有内容。它应该可以很好地捕获该导入。 现在导入工作了,我将其余部分添加到启动器中。但是,当我在 PyCharm 中运行此代码时,我收到 AttributeError: 'Dialog' object has no attribute 'setup_ui' 对不起,另一个错字。 self.setupUi(self) 我将 Generator.pyGUI.py 移动到一个新文件夹中并运行 pyinstaller.exe -F Generator.py。它可以编译,但是当我运行 .exe 时,我会得到一个控制台,该控制台会立即关闭,其中已写入; 此应用程序无法启动,因为它无法在“”中找到或加载 Qt 平台插件“windows”。重新安装应用程序可能会解决此问题

以上是关于使用 PyInstaller 创建的 .exe 文件不显示其 GUI的主要内容,如果未能解决你的问题,请参考以下文章

ImportError: 当使用pyinstaller创建一个.exe时,无法导入名称'pywrap_tensorflow'。

为 pyinstaller 创建的 .exe 生成证书

我使用 pyinstaller 创建的 .exe 文件适用于 Windows 10,但不适用于 Windows 7

有没有办法创建从 pyinstaller --onefile 生成的单个可执行 exe 文件的 MSI 包?

Cython + PyInstaller 创建 EXE 文件

python-pyinstaller打包