QDialog Window 退出 PyInstaller 冻结程序后神秘启动

QDialog Window Mysteriously Launches After Exiting PyInstaller Frozen Program

PyQt5 QDialog window 在我冻结的 Python 3.8 脚本退出后神秘地自动启动。

我有两个不同的应用程序(ProgA 和 ProgB)是通过冻结 Python 脚本创建的。它们的相似之处在于它们都有 PyQt5 GUI 界面,都使用 OpenCV 合并视频,都有类似的 QDialog windows 用于用户配置,并且都在 Windows 10 平台上 运行。每个应用程序都有多个 Python 模块,每个模块都已被 PyInstaller 和 cx_Freeze.

冻结

ProgA 运行s 并在 IDE 中执行或在使用 PyInstaller 或 cx_Freeze.

冻结它后毫无问题地退出

ProgB 运行s 并在 IDE 内或在 cx_Freeze 冻结后没有任何问题退出。 ProgB 在使用 PyInstaller 冻结后也 运行 正常,但在退出时出现一些奇怪的事情——启动了一个包含用户配置的 QDialog window。

这个对话框window包含几个单选按钮和QLineEdit对象。在主 window 退出后启动时,window 与在 Qt Designer 中创建的完全一样——它包含默认的单选按钮复选标记,就好像它被重置了一样——它有 none用户配置首选项。因此,未读取配置文件。

我创建了一个与 ProgB 完全一样退出程序的最小示例,但最小示例没有重现问题。

我还在单击主要 window 退出按钮后的每个语句之间放置了打印语句,然后是 2 秒的睡眠(这样我可以跟随执行)。 ProbB 在启动对话框 window 之前执行最后一条语句 QtCore.QCoreApplication.quit()

这是我在 PyInstaller 中使用的规范文件。

block_cipher = None
a = Analysis(['ProgB.py','CustomCombo.py','Config.py','Layout.py'],
             pathex=['c:\Users\slalo\Documents\VTMBuild'],
             binaries=[],
             datas=[('Icon.ico','.'),
                    ('IconSmall.ico','.'),
                    ('License.txt','.'),
                    ('Manual.htm','.'),
                    ('Manual_files','Manual_files')],
             hiddenimports=[],
             hookspath=[],
             runtime_hooks=[],
             excludes=[],
             win_no_prefer_redirects=False,
             win_private_assemblies=False,
             cipher=block_cipher,
             noarchive=False)
pyz = PYZ(a.pure, a.zipped_data,
             cipher=block_cipher)
exe = EXE(pyz,
          a.scripts,
          [],
          exclude_binaries=True,
          name='ProgB',
          debug=False,
          bootloader_ignore_signals=False,
          strip=False,
          upx=True,
          console=True)
coll = COLLECT(exe,
               a.binaries,
               a.zipfiles,
               a.datas,
               strip=False,
               upx=True,
               upx_exclude=[],
               name='ProgB')

我已经束手无策了。我找不到 QDialog window 在退出 ProgB 后神秘出现的任何原因。有什么建议吗?

当 PyInstaller 打包冻结基线时,Analysis 列表中的任何脚本都被视为主要脚本。支持文件(CustomCombo.pyConfig.pyLayout.py)应包含在 datas 列表而不是 Analysis 列表中。这解决了我的问题。