FileNotFoundError: [WinError 3] 系统找不到指定的路径:'PY_VAR0'

问题描述 投票:0回答:1
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
python tkinter error-handling helper
1个回答
0
投票

您必须添加

.get()
才能打印 stringvar 的值。
var
是对
Tkinter.StringVar
对象的引用。您需要调用它的
get
方法来访问它代表的值: 它应该是:
shutil.copytree(src_choosed.get(),dest_choosed.get())

出现此类情况时请更换

© www.soinside.com 2019 - 2024. All rights reserved.