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()
我的进度条有问题:
startbar()在图形界面上启动进度条,但是当启动shutil(copytree(path,r“backup \ dirbackup1.minecraft”))时,界面冻结和进度条停止直到完成。 感谢
我正在使用python 3.3
抱歉我的英语很差答案 0 :(得分:1)
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))
如果失败则执行onError,成功时执行onEnd。
答案 1 :(得分:1)
进度条显示什么?如果您要显示复制的文件的百分比,则必须先获取文件的总长度/字节数,然后定期更新复制的字节数。这将需要使用“after”来检查复制到文件的大小每隔这么多毫秒(我想我只是在这里猜测,但首先搜索,因为必须有人已经做过这样的事情。)这是我找到的第一个链接https://mail.python.org/pipermail/tkinter-discuss/2010-December/002613.html它可能比您想要的更多,但应该有所帮助。
答案 2 :(得分:0)
在每个self.Frame.update_idletasks()
语句后使用self.pgBar.step(x)
,其中'x'代表进度条值增加的值