关闭复制文件时GUI冻结

2024-10-03 23:20:23 发布

您现在位置:Python中文网/ 问答频道 /正文

def creabackuno():
  startbar()
  messagebox.showinfo( "Wait..","I am creating the backup, please wait...")
  try:
      copytree(path,r"backup\dirbackup1\.minecraft")
      messagebox.showinfo( "OK!","Backup (1) created!")
      stopbar()
  except OSError as exc:
      messagebox.showerror( "Nope!","There is already a backup to restore")
      stopbar()

我对progressbar有问题:

startbar()在图形界面上启动progressbar,但是当start shutil(copytree(path,r“backup\dirbackup1.minecraft”))时,界面冻结,progressbar停止,直到它完成。 谢谢

我使用的是python3.3

对不起,我的英语很差


Tags: pathcreatingdefambackupwaitminecraftprogressbar
3条回答

进度条显示什么?如果要显示复制的文件的百分比,则必须首先获取文件的总长度/字节,然后根据复制的字节数定期更新。这将需要使用“after”每隔那么多毫秒检查一次复制到文件的大小(我想我只是在猜测,但是首先搜索,因为必须有人已经做过类似的事情。)这是我找到的第一个链接https://mail.python.org/pipermail/tkinter-discuss/2010-December/002613.html它可能比你想要的要多,但应该有帮助。在

copytree是一个同步函数,因此所有代码的执行都将停止,直到它完成为止。虽然tkinter对于线程安全性不高感到遗憾,但我建议您将该命令放在另一个线程中:

from thread import start_new_thread as snt
#from _thread import start_new_thread as snt for python 3

def copy(onError,onEnd):
    try: copytree(path,r"backup\dirbackup1\.minecraft")
    except: 
       onError()
       return
    onEnd()

def onEnd():
    messagebox.showinfo( "OK!","Backup (1) created!")
    stopbar()

def onError():
      messagebox.showerror( "Nope!","There is already a backup to restore")
      stopbar()

#then call with

snt(copy,(onError,onEnd))

如果失败,则执行一个错误,如果成功则执行一个。在

在每个self.pgBar.step(x)语句后使用self.Frame.update_idletasks(),其中“x”代表progressbar的值增加的值

相关问题 更多 >