2015-05-30 52 views
2

我已经使用这个compile.py安装了很多次,并取得了巨大的成功。我刚刚发现更新一个应用程序后,它在python中运行良好。当我冻结它时,它不会运行正确,不会输出任何错误?Python 3 cx_freeze Win34GUI问题

这是我的编译的代码:

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)] ,) 

当我移除基底=基线,该.exe与输出窗口中启动和应用程序正常运行。如果我设置base = base来删除输出窗口,那么应用程序不会正确运行?

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

我迷路了。

感谢您的帮助!

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) 
+0

体面的问题,但有代码格式化的东西堰。你可以删除反引号之间的空格吗?更可读的问题可能会导致更多的答复。 – ShellFish

+0

对不起,网站新增功能。必须习惯编辑。 – rankind

+0

没问题,只是想帮忙。但是,我在很长一段时间里看到的第一个更好的第一次问题,因此其他人,我正在给你upvotes :)保持良好的工作! – ShellFish

回答

0

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

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

谢谢!