Python tkinter exe with cx_Freeze for Windows 不会显示 GUI



>问题已解决。 问题出在我用于剪贴板操作的 jaraco 模块上,我使用了 Pyperclip 代替。

我用tkinter制作了一个python应用程序,它运行良好,但我想从中制作一个exe,以便在Windows中对用户友好。我为此使用了cx_Freeze库,这也很好用,但并非总是如此。

使用 cx_Freeze 创建 exe 时,您可以指定基本参数,如果您不提供,则会为您的应用程序打开 2 个窗口、cmd 窗口和一个 GUI 窗口。要摆脱cmd窗口,您可以指定"Win32GUI"作为cx_Freeze的基本参数。

这会忽略cmd窗口,只是打开GUI,它似乎在工作,但并非总是如此。 有时打开 exe 文件会启动过程,但不会显示 GUI。打开cmd并转到exe的目录并从那里启动它实际上将显示GUI并解决问题,直到重新启动PC(您可以在没有cmd的情况下打开应用程序,直到重新启动为止一切正常(

似乎只要cmd窗口在您的RAM中,GUI就会显示,否则它"不知道"并且无法显示GUI。

代码可以在这里找到:https://github.com/GrishaDev/ClipMagic

clip.py是整个应用程序

setup.py是与cx_Freeze一起使用以获取应用程序的exe的文件,这是您指定基本参数等的地方。

最有可能出现问题的代码段是(setup.py(:

import sys
from cx_Freeze import setup, Executable
# import os
# os.environ['TCL_LIBRARY'] = "C:\Users\Grisha\AppData\Local\Programs\Python\Python35\tcl\tcl8.6"
# os.environ['TK_LIBRARY'] = "C:\Users\Grisha\AppData\Local\Programs\Python\Python35\tcl\tk8.6"
import os.path
PYTHON_INSTALL_DIR = os.path.dirname(os.path.dirname(os.__file__))
os.environ['TCL_LIBRARY'] = os.path.join(PYTHON_INSTALL_DIR, 'tcl', 'tcl8.6')
os.environ['TK_LIBRARY'] = os.path.join(PYTHON_INSTALL_DIR, 'tcl', 'tk8.6')
base = None
if sys.platform == "win32":
base = "Win32GUI"
setup(name="clipmagic",
version="1",
description="Extended clipboard",
options={'build_exe': {'includes': ["jaraco", "tkinter"], 'include_files':[
os.path.join(PYTHON_INSTALL_DIR, 'DLLs', 'tk86t.dll'),
os.path.join(PYTHON_INSTALL_DIR, 'DLLs', 'tcl86t.dll'),
'icon.ico',
]}},
executables=[Executable("clip.py", base=base, icon='icon.ico')])
#"Win32GUI"

谢谢!

查看代码存储库中的README.md,您使用的是当前版本的cx_Freeze,即 5.1.1。在此版本中,包含的模块位于构建目录的子目录中lib。手动添加的 DLL 显然也需要移动到那里。看到这个答案。

尝试对setup.py脚本进行以下更改:

options={'build_exe': {'includes': ["jaraco", "tkinter"], 'include_files':[
(os.path.join(PYTHON_INSTALL_DIR, 'DLLs', 'tk86t.dll'), os.path.join('lib', 'tk86t.dll')),
(os.path.join(PYTHON_INSTALL_DIR, 'DLLs', 'tcl86t.dll'), os.path.join('lib', 'tcl86t.dll')),
'icon.ico',
]}},

最新更新