问题已解决。 问题出在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并解决问题,直到您重新启动计算机(您可以在不使用cmd的情况下打开该应用程序,直到重新启动为止)
似乎只要cmd窗口在您的内存中,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"
谢谢!
答案 0 :(得分:0)
查看代码存储库中的README.md
,您正在使用cx_Freeze
的当前版本,即5.1.1。在此版本中,所包含的模块位于构建目录的子目录lib
中。手动添加的DLL显然也需要移动到那里。参见this answer。
尝试对您的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',
]}},