为什么说python使用tkinter出错?



你好,我想让一个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="من الطبيعي عدم استجابة الكمبيوتر عند التحميل")

最新更新