Python 3 cx_freeze Win34GUI问题

时间:2015-05-30 00:29:53

标签: python-3.x cx-freeze

我已经使用了这个compile.py设置很多次并取得了巨大的成功。我刚刚在更新了一个应用程序后发现它在python中运行良好。当我冻结它时,它不能正常运行并且不输出任何错误?

这是我的编译代码:

from cx_Freeze import setup, Executable
import sys

base = None
if sys.platform == "win32":
     base = "Win32GUI"
setup( name = "MYAPP" , 
       version = "0.1" , 
       description = "MYAPP" , 
       executables = [Executable("MYAPP.py",
                                 icon = "s.ico", 
                                 base = base)] , )

当我删除base = base line时,.exe将启动一个输出窗口并且应用程序正确运行。如果我设置base = base来删除输出窗口,应用程序将无法正常运行?

我认为问题代码是urllib.request.urlretrieve的reporthook函数,因为它在我尝试集成此下载进度条之前没有开始执行此操作。这是我试图下载的每个文件运行的for循环的一部分。如果我在compile.py文件中设置base = base,它将下载第一个文件,然后在它达到100%后停止...

我迷路了。

感谢您的帮助!

def reporthook(blocknum, blocksize, totalsize):
    percent = 0
    readsofar = blocknum * blocksize
    if totalsize > 0:
        percent = readsofar * 1e2 / totalsize
        if percent >= 100:
            percent = 100

        s = "\r%5.1f%% %*d / %d" % (
            percent, len(str(totalsize)), readsofar, totalsize)

        self.time['text'] = 'Downloading File: '+self.fn+'' + s

        if readsofar >= totalsize: # near the end
            sys.stderr.write("\n")
    else: # total size is unknown
        sys.stderr.write("read %d\n" % (readsofar,))

    #UPDATE PROGRESSBAR
    self.pb.config(mode="determinate")
    if percent > 0:
        self.dl_p = round(percent,0)
        self.pb['value'] = self.dl_p
        self.pb.update()
    if percent > 100:
        self.pb['value'] = 0
        self.pb.update()

urllib.request.urlretrieve(imgs, fileSavePath, reporthook)

1 个答案:

答案 0 :(得分:0)

Thomas K--这是问题的解决方案。

“如果你使用GUI库冻结它,所以在运行它时没有命令提示符,你根本不应该写入sys.stdout或sys.stderr。它们用于命令提示符,所以如果你没有命令提示符,它们将无法正常工作。 - Thomas K 11小时前“

谢谢!