shutil 复制文件时 GUI 冻结


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

我的进度条有问题:

startbar() 启动图形界面上的进度条,但是当启动 shutil(copytree(path,r"backup\dirbackup1.minecraft")) 时,界面冻结和进度条停止,直到完成。谢谢

我正在使用Python 3.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"backupdirbackup1.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"代表进度条的值增加的值

最新更新