【问题标题】:QDialog Window Mysteriously Launches After Exiting PyInstaller Frozen Program退出 PyInstaller 冻结程序后,QDialog 窗口神秘地启动
【发布时间】:2020-11-13 19:58:45
【问题描述】:

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

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

在 IDE 中执行或使用 PyInstaller 或 cx_Freeze 冻结 ProgA 时,ProgA 运行和退出没有任何问题。

ProgB 在 IDE 内或使用 cx_Freeze 冻结后运行和退出时没有任何问题。使用 PyInstaller 冻结后 ProgB 也可以正常运行但退出时出现一些奇怪的情况 - 启动了一个包含用户配置的 QDialog 窗口。

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

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

在单击主窗口退出按钮后,我还在每个语句之间放置了打印语句,然后是 2 秒的睡眠(这样我可以跟随执行)。 ProbB 在启动对话窗口之前执行最后一条语句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')

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

【问题讨论】:

    标签: python python-3.x pyqt pyqt5 pyinstaller


    【解决方案1】:

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2020-11-13
      • 2017-05-15
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-10-02
      • 1970-01-01
      相关资源
      最近更新 更多