簡體   English   中英

使用cx_Freeze將tkinter程序轉換為exe並運行exe文件后出錯

[英]Error after converting tkinter program to exe using cx_Freeze and running the exe file

我已經花費了數小時試圖找到解決此問題的方法,但是還沒有找到任何有用的方法。 所以我正在嘗試使用cx_Freeze將tkinter程序轉換為exe。 一切正常,直到我嘗試打開實際的exe文件為止。 這是錯誤報告

我的安裝文件:

import os
import sys
from cx_Freeze import setup, Executable

base = None

if sys.platform == 'win32':
    base = 'Win32GUI'

os.environ['TCL_LIBRARY'] = r"C:\Users\Osborne-Win10\AppData\Local\Programs\Python\Python36\DLLs\tcl86t.dll"
os.environ['TK_LIBRARY'] = r"C:\Users\Osborne-Win10\AppData\Local\Programs\Python\Python36\DLLs\tk86t.dll"

build_options = dict(
    packages=['sys'],
    includes=['tkinter'],
    include_files=[(r'C:\Users\Osborne-Win10\AppData\Local\Programs\Python\Python36\DLLs\tcl86t.dll',
                    os.path.join('lib', 'tcl86t.dll')),
                   (r'C:\Users\Osborne-Win10\AppData\Local\Programs\Python\Python36\DLLs\tk86t.dll',
                    os.path.join('lib', 'tk86t.dll'))]
)

executables = [
    Executable('app.py', base=base)
]

setup(name='simple_Tkinter',
      options=dict(build_exe=build_options),
      version='0.1',
      description='Sample cx_Freeze tkinter script',
      executables=executables,
      )

和我的腳本:

import tkinter as tk

root = tk.Tk()

tk.Label(root, text='Application', font='Tahoma 15 bold italic').pack()

tk.mainloop()

因此,如果您有什么想法會導致錯誤,請告訴我!

(OP修改了問題后對答案進行了編輯)

我猜想os.environ定義有問題。 它們應指向TCL / TK目錄,而不是DLL。 這些定義應類似於:

os.environ['TCL_LIBRARY'] = r"C:\Users\Osborne-Win10\AppData\Local\Programs\Python\Python36\tcl\tcl8.6"
os.environ['TK_LIBRARY'] = r"C:\Users\Osborne-Win10\AppData\Local\Programs\Python\Python36\tcl\tk8.6"

無論如何,最好按照以下答案中的建議,讓安裝腳本動態查找TCL / TK資源的位置:

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')

build_options = dict(
    packages=['sys'],
    includes=['tkinter'],
    include_files=[(os.path.join(PYTHON_INSTALL_DIR, 'DLLs', 'tcl86t.dll'),
                    os.path.join('lib', 'tcl86t.dll')),
                   (os.path.join(PYTHON_INSTALL_DIR, 'DLLs', 'tk86t.dll'),
                    os.path.join('lib', 'tk86t.dll'))]
)

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM