cx_freeze调试控制台?

时间:2018-06-14 22:15:51

标签: python python-3.x cx-freeze

我尝试将我的(精细工作)python 3.6 tkinter gui应用程序构建到一个可以执行的窗口。经过几个小时的试验,一个错误(有一些名称和dll问题)我得到它运行。但它似乎有各种各样的错误。有些函数似乎不起作用,我没有产生错误的控制台输出......有没有办法调试exe?

这是我的setup.py

import sys
from cx_Freeze import setup, Executable
import os

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

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

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

build_exe_options = {"packages": ["tkinter",
                                  "PIL",
                                  "savReaderWriter",
                                  "numpy",
                                  "scipy",
                                  "os"],
                     "include_files": ["tcl86t.dll",
                                       "tk86t.dll"]}

setup(name='myApp',
      version='0.1',
      description='some description',
      options = {'build_exe': build_exe_options},
      executables=executables
      )

myApp.py

太大了,无法在此发布。这是一个只能“解冻”的片段。你需要一个spss.sav文件like this来试试这个。

from tkinter import *
from tkinter import ttk, filedialog, messagebox
from PIL import Image, ImageTk, ImageDraw
from savReaderWriter import SavReader
import numpy as np
from scipy.ndimage import gaussian_filter
import os

class MyApp:

    spss_file = None

    def import_spss(self, *args):

        filename = filedialog.askopenfilename()

        if filename:
            try:
                with SavReader(filename, returnHeader=True, ioUtf8=True) as reader:
                    spss_file = reader.all()

                self.spss_file = np.array(spss_file)

            except Exception as ex:
                messagebox.showinfo(title="Import SPSS File",
                                    message="Warning: wrong file format chosen! \nAccepted formats: sav")
                print(ex)
                return
        else:
            return


def main():
    App = MyApp()
    App.import_spss()
    print("everything works fine")

main()

1 个答案:

答案 0 :(得分:4)

如果您想要显示控制台窗口,在冻结之后,只需从安装脚本中删除此代码:

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

该代码的作用是告诉cx_Freeze在冻结后显示控制台窗口而不是。这只在Windows上需要,因为在其他操作系统上,它取决于它是否从终端运行。但是,确保在完成调试后,将代码重新放入,或者控制台窗口显示在您的应用中。
顺便说一句,我曾经遇到过的最烦人的问题之一就是使用tkintercx_Freeze创建了一个程序。问题是它从错误的目录开始,无法找到TK Dll。如果您使用控制台运行此操作,并且看到有关未找到文件的内容,则可能是您没有包含该文件,或者它位于错误的目录中。
祝你有个美好的一天!