Python Tkinter EXE, построенный с Cx_Freeze для Windows, не будет отображать графический интерфейс - PullRequest
0 голосов
/ 13 сентября 2018

ПРОБЛЕМА РЕШЕНА. проблема была с модулем jaraco, который я использовал для работы с буфером обмена, вместо этого я использовал pyperclip.

Я сделал приложение на python с tkinter, которое отлично работает, но я хотел сделать exe из него, чтобы оно было удобным для пользователей в Windows. Для этого я использовал библиотеку cx_Freeze, которая тоже отлично работает, но не всегда.

При создании exe с использованием cx_Freeze вы можете указать базовый параметр, если вы не дадите ничего, что откроет 2 окна, окно cmd и окно GUI для вашего приложения. Чтобы избавиться от окна cmd, вы можете указать «Win32GUI» в качестве базового параметра для cx_Freeze.

Это игнорирует окно cmd и просто открывает графический интерфейс, кажется, работает, но не всегда. Иногда открытие exe-файла запускает процесс, но никакой графический интерфейс не отображается. Открыв cmd и перейдя в каталог вашего exe-файла и запустив его оттуда, вы фактически увидите GUI и исправите проблему, пока не перезагрузите компьютер (вы можете открыть приложение без cmd, если все работает до перезагрузки)

Похоже, что пока окно cmd находится в вашем оперативной памяти, графический интерфейс будет отображаться, в противном случае он "не знает" и не отображает графический интерфейс.

Код можно найти здесь: 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"

Спасибо!

1 Ответ

0 голосов
/ 13 сентября 2018

Глядя на 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',
    ]}},
...