使用 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.py 和 GUI.py 移动到一个新文件夹中并运行pyinstaller.exe -F Generator.py
。它可以编译,但是当我运行 .exe 时,我会得到一个控制台,该控制台会立即关闭,其中已写入; 此应用程序无法启动,因为它无法在“”中找到或加载 Qt 平台插件“windows”。重新安装应用程序可能会解决此问题以上是关于使用 PyInstaller 创建的 .exe 文件不显示其 GUI的主要内容,如果未能解决你的问题,请参考以下文章
ImportError: 当使用pyinstaller创建一个.exe时,无法导入名称'pywrap_tensorflow'。
我使用 pyinstaller 创建的 .exe 文件适用于 Windows 10,但不适用于 Windows 7
有没有办法创建从 pyinstaller --onefile 生成的单个可执行 exe 文件的 MSI 包?