你好,我想让一个YouTube下载在python使用tkinter,但有一个错误代码是:
from tkinter import *
from tkinter import filedialog, ttk
from pytube import YouTube
from tkinter.ttk import *
window = Tk()
window.geometry("500x500+350+100")
def openpath():
download_out.config(text="من الطبيعي عدم استجابة الكمبيوتر عند التحميل")
font = ("bahnschrift SewiBold", 10, "bold")
download_name.config(text="")
download_size.config(text="")
download_loc.config(text="")
global direct
direct=filedialog.askdirectory()
path_holder.config(text = direct)
def Download():
url = link_ent.get()
Selceted= types.get()
if len(url) < 1:
link_error.config(text = "الرجاء ادخال موقع الفيديو")
if len(direct) < 1:
path_error.config(text = "الرجاء ادخال مكان تنزيل الملف")
else:
link.config(text="")
path_error.config(text="")
try:
Yt = YouTube(url)
try:
if Selceted == options[0]:
typ = Yt.streams.get_highest_resolution()
elif Selceted == options[1]:
typ = Yt.streams.get_lowest_resolution()
else:
Yt.streams.get_audio_only()
except:
path_error.config(text="حدثت معنا اخطاء")
except:
path_error.config(text="الرجاء ادخال مكان تنزيل صالح!")
window.title("Youtube Downloader")
window.resizable(False,False)
window.config(bg = "gray3")
heading = Label(window, text = "برنامج تحميل الفيديوهات", background = "gray3",foreground = "dark
orange",
font = ("bahnschrift SewiBold",20,"bold"))
heading.pack(anchor="center",pady=10)
link = Label(window,text="الرابط",background="gray3",foreground="dark orange",
font = ("bahnschrift SewiBold",10))
link.pack(anchor="ne",padx=30,pady=25)
entry_url=StringVar()
link_ent=Entry(window,width=52,textvariable = entry_url)
link_ent.place(x=90,y=83)
link_error= Label(window,background="gray3",foreground="dark orange",
font = ("Bahnschrift SewiBold",10))
link_error.place(x=300,y=110)
path = Label(window,text="موقع الملف",background="gray3",foreground="dark orange",
font = ("bahnschrift SewiBold",10))
path.pack(anchor="ne",padx=30,pady=2)
path_holder= Label(window,text="ttt",background="white",foreground="black",
font = ("bahnschrift SewiBold",10))
path_holder.place(x=240,y=130)
path_style=ttk.Style()
path_style.configure("PT.TButton",background="DarkOrange1",foreground="DarkOrange1",
font = ("bahnschrift SewiBold",10))
path_btn = Button(window,width=11,text= "Selcet Path " ,style="PT.TButton",command=
openpath())
path_btn.place(x=323,y=156)
path_error= Label(window,text="Demo",background="gray3",foreground="dark orange",
font = ("Bahnschrift SewiBold",10))
path_error.place(x=280,y=150)
Download_type=Label(window,text="أنواع التنزيل",background="gray3",foreground="dark orange",
font = ("Bahnschrift SewiBold",10))
Download_type.pack(anchor="e",padx=30,pady=37)
options=["جودة عالية","جودة منخفضة","صوت فقط"]
types = ttk.Combobox(window,values=options,width=23)
types.current(0)
types.place(x=240,y=185)
ChooseType=Label(window,text="اختر النوع ",background="gray3",foreground="dark orange",
font = ("Bahnschrift SewiBold",10))
ChooseType.place(x=170,y=187)
download_style=ttk.Style()
download_style.configure("DD.TButton",background="DarkOrange1",foreground="DarkOrange1",
font = ("bahnschrift SewiBold",10))
Download_btn = Button(window,width=11,text= "تحميل " ,style="PT.TButton")
Download_btn.pack(anchor="center",pady=30)
download_out=Label(window,text="طبيغي ان تظهر رسالة اللابتوب غير مستجيب أثناء
التحميل",background="gray3",foreground="dark orange",
font = ("Bahnschrift SewiBold",10))
download_out.pack(anchor="center",pady=30)
download_name=Label(window,background="gray3",foreground="dark orange",
font = ("Bahnschrift SewiBold",10))
download_name.pack(anchor="ne",padx=30,pady=10)
download_size=Label(window,background="gray3",foreground="dark orange",
font = ("Bahnschrift SewiBold",10))
download_size.pack(anchor="ne",padx=30,pady=10)
download_loc=Label(window,background="gray3",foreground="dark orange",
font = ("Bahnschrift SewiBold",10))
download_loc.pack(anchor="ne",padx=30,pady=10)
window.mainloop()
,错误是:
Traceback (most recent call last):
File "C:UsersbaraaPycharmProjectspythonProject1folderbaraa.py", line 72, in <module>
path_btn = Button(window,width=11,text= "Selcet Path " ,style="PT.TButton",command= openpath())
File "C:UsersbaraaPycharmProjectspythonProject1folderbaraa.py", line 10, in openpath
download_out.config(text="من الطبيعي عدم استجابة الكمبيوتر عند التحميل")
NameError: name 'download_out' is not defined`
直到第100行才定义download_out
,但是在第73行调用openpath()
,因此在定义download_out
之前调用该函数。这个函数openpath
第一行引用了download_out
,因为这个函数在你定义download_out
之前被调用,这就是为什么你得到错误说它没有定义
如果你想在函数openpath
中使用download_out
,那么你需要在调用openpath()
之前定义download_out
。您确定您的意思是在第100行调用openpath
还是只是传递对它的引用?
我怀疑你想改变这一行
path_btn = Button(window,width=11,text= "Selcet Path ",style="PT.TButton",command=openpath())
path_btn = Button(window,width=11,text= "Selcet Path ",style="PT.TButton",command=openpath)
传递给openpath的引用而不是执行openpath的结果
在Button
中使用错误的command
选项值,它应该是按钮单击时调用的函数名,而不是函数的结果。
在你的代码中,函数将在定义变量download_out
之前被调用。
#path_btn = Button(window,width=11,text= "Selcet Path " ,style="PT.TButton",command=openpath())
path_btn = Button(window,width=11,text= "Selcet Path " ,style="PT.TButton",command=openpath)
由于download_out被声明为全局变量,您应该使用保留字global
以便在函数openpath
中使用它
global download_out
download_out.config(text="من الطبيعي عدم استجابة الكمبيوتر عند التحميل")