import shutil,os
from tkinter import *
from tkinter import filedialog,font as tkfont, messagebox as m_box
import pickle
readFile = open("path.pkl","rb")
path_list = pickle.load(readFile)
win = Tk()
win.resizable(0, 0)
icon = PhotoImage(file="icon.png")
win.iconphoto(False,icon)
win.title("Backup Manager")
win.rowconfigure(0,weight=1)
win.columnconfigure(0,weight=1)
helv20 = tkfont.Font(family="Helvatica",size=20,weight=tkfont.BOLD)
#=================define functions=================#
def add_path_win_func():
add_win = Toplevel()
add_win.focus_force()
add_win.title("Add More Paths")
add_win.iconbitmap(None)
lbl1= Label(add_win,text="Choose path To be Add in the list",font=("helvatica",15))
lbl2=Label(add_win,bg="dark grey",text="",font=("helvatica",14))
brws_btn = Button(add_win,command=lambda:browse(lbl2,add_win),text='Browse...',font=helv20)
add_btn = Button(add_win,command=lambda:add_func(add_win),text="Add",font=("helvatica",16))
Cancel_btn = Button(add_win,text="Cancel",command=lambda:add_win.destroy(),font=("helvatica",16))
lbl1.grid(row=0,column=0,padx=8,pady=8)
lbl2.grid(row=1,column=0,pady=8)
brws_btn.grid(row=1,column=1,pady=8)
add_btn.grid(row=2,column=0,pady=18,padx=18)
Cancel_btn.grid(row=2,column=1,pady=18,padx=18)
add_win.mainloop()
def add_func(zz):
global path_list,choosed_path,path_lst_box
if choosed_path=="":
m_box.showerror("please choose a path")
else:
write_file = open("path.pkl","wb")
path_list.append(choosed_path)
pickle.dump(path_list,write_file)
write_file.close()
path_lst_box.delete(0)
path_lst_box.insert(END,*path_list)
zz.destroy()
choosed_path = ""
def browse(lbl,zz):
global choosed_path
choosed_path = filedialog.askdirectory()
zz.focus_force()
lbl.config(text=choosed_path)
def backup_func():
global src_choosed,dest_choosed
src_choosed = str(src_choosed)
dest_choosed = str(dest_choosed)
folder = os.path.basename(src_choosed)
new_dest = str(f"{dest_choosed}/{folder}")
if not os.path.exists(new_dest):
shutil.rmtree(new_dest)
else:
None
shutil.copytree(src_choosed,dest_choosed)
#=================Backup Screen====================#
backup_screen = Frame(win,bg="#AFE1AF")
src_choosed = StringVar()
bl1 = Label(backup_screen,font=("verdana",20),text="Choose Source To Be Copied")
src_combo = OptionMenu(backup_screen,src_choosed,*path_list)
src_combo.config(font=helv20)
menu_src = win.nametowidget(src_combo.menuname)
menu_src.config(font=helv20)
dest_choosed = StringVar()
try:
dest_choosed.set(path_list[0])
src_choosed.set(path_list[0])
except:
None
bl2 = Label(backup_screen,font=("verdana",20),text="Choose Destination")
dest_combo = OptionMenu(backup_screen,dest_choosed,*path_list)
dest_combo.config(font=helv20)
menu_dest = win.nametowidget(dest_combo.menuname)
menu_dest.config(font=helv20)
backup_btn = Button(backup_screen,command=backup_func,text="Back up",width=20,font=("Verdana",15))
path_btn = Button(backup_screen,text="Manage Paths",width=20,
font=("Verdana",15),command=lambda:mng_path_screen.tkraise())
bl1.grid(row=0,column=0,pady=4)
src_combo.grid(row=1,column=0,sticky="ew",pady=4)
bl2.grid(row=2,column=0,pady=4)
dest_combo.grid(row=3,column=0,sticky="ew",pady=4)
backup_btn.grid(row=4,column=0,pady=4)
path_btn.grid(row=5,column=0,pady=4)
#==================Manage Path==================#
mng_path_screen = Frame(win,bg="#E4D00A")
path_lst_box = Listbox(mng_path_screen,width=50)
path_lst_box.insert(0,*path_list)
add_path_btn = Button(mng_path_screen,text="Add Path",
command=add_path_win_func,font=("verdana",16))
go_back_btn = Button(mng_path_screen,text="Go Back",
command=lambda:backup_screen.tkraise(),font=("verdana",16))
path_lst_box.grid(row=0,column=0,padx=50, pady=6)
add_path_btn.grid(row=1,column=0)
go_back_btn.grid(row=2,column=0)
for frame in (backup_screen,mng_path_screen):
frame.grid(column=0,row=0,sticky="nswe")
backup_screen.tkraise()
win.mainloop()
我想制作一个供个人使用的备份软件,但当我单击备份按钮时遇到此错误。
Exception in Tkinter callback
Traceback (most recent call last):
File "C:\Users\DELL\AppData\Local\Programs\Python\Python39\lib\tkinter\__init__.py", line 1892, in __call__
return self.func(*args)
File "c:\Users\DELL\Documents\VS Code Insiders\BackUp Maker\bakup.py", line 70, in backup_func
shutil.copytree(src_choosed,dest_choosed)
File "C:\Users\DELL\AppData\Local\Programs\Python\Python39\lib\shutil.py", line 555, in copytree
with os.scandir(src) as itr:
FileNotFoundError: [WinError 3] The system cannot find the path specified: 'PY_VAR0
您必须添加
.get()
才能打印 stringvar 的值。 var
是对 Tkinter.StringVar
对象的引用。您需要调用它的 get
方法来访问它代表的值:
它应该是:
shutil.copytree(src_choosed.get(),dest_choosed.get())
出现此类情况时请更换