Python 如何使if语句中的代码只执行一次,直到用户输入另一个有效URL?

Python 如何使if语句中的代码只执行一次,直到用户输入另一个有效URL?,python,tkinter,Python,Tkinter,我想知道如何生成代码,以便一旦用户输入有效的URL,它只执行if语句中的代码一次,直到用户输入另一个有效的URL并且不经常执行代码为止。提前谢谢 代码: from tkinter import * from pytube import YouTube root = Tk() frame1 = LabelFrame(root, padx = 50 , pady = 20 , borderwidth = 0 , highlightthickness = 0) frame1.pack()

我想知道如何生成代码,以便一旦用户输入有效的URL,它只执行if语句中的代码一次,直到用户输入另一个有效的URL并且不经常执行代码为止。提前谢谢

代码:

from tkinter import *
from pytube import YouTube



root = Tk()


frame1 = LabelFrame(root, padx = 50 , pady = 20 , borderwidth = 0 , highlightthickness = 0)

frame1.pack()


urlentryvar = StringVar()
urlentry = Entry(frame1, width =40, textvariable = urlentryvar, justify="center" , font =("Bauhaus 93" , 10))
urlentry.insert(0,"ENTER URL")
urlentry.grid(row=0,column=0 , columnspan =3, ipady = 10)

frame2 = LabelFrame(root,padx = 10, borderwidth = 0 , highlightthickness = 0)
frame2.pack(anchor=W)


TitleLabel = Label(frame2 , text=f"Title:", font =("Bauhaus 93" ,10))

TitleLabel.grid(row=0,column= 1,stick = NW )




def get_the_url_and_display_title():
    global url
    url = urlentry.get()
    
    
  
    
    if url[0:5] == "https":
        
             
        yt = YouTube(url)
        Youtube_video_title = yt.title
              
        TitleLabel.config(text=f"Title:{Youtube_video_title}")
            
    root.after(2000,get_the_url_and_display_title)    
get_the_url_and_display_title()
            
root.mainloop()

删除
root.after
,这对于您试图实现的目标来说是非常不必要的。您无需使用if-else块检查URL是否有效,
pytube
将在输入无效URL时引发异常。使用try-except块来处理异常

另外,将Return键绑定到
获取\u url\u和\u display\u title
。这样,仅当用户按下enter键时才执行该函数。您也可以创建submit按钮

更正代码:

从tkinter导入*
从pytube导入YouTube
def get__url_和_display_标题(事件):
url=urlentry.get()
text=“错误”
尝试:
yt=YouTube(url)
Youtube\u video\u title=yt.title
text=f“标题:{Youtube\u video\u Title}”
除例外情况外:
通过
TitleLabel.config(text=text)
#root.after(2000,lambda:TitleLabel.config(text=“Title:”)
root=Tk()
frame1=LabelFrame(根,padx=50,pady=20,borderwidth=0,highlightthickness=0)
frame1.pack()
urlentryvar=StringVar()
urlentry=Entry(frame1,width=40,textvariable=urlentryvar,justify=“center”,font=(“Bauhaus 93”,10))
插入(0,“输入URL”)
grid(行=0,列=0,列span=3,ipady=10)
bind(“,获取\u url\u和\u显示\u标题)
frame2=LabelFrame(根,padx=10,borderwidth=0,highlightthickness=0)
框架2.包装(锚定=W)
标题标签=标签(第2帧,文本=f“Title:,字体=(“Bauhaus 93”,10))
标题标签网格(行=0,列=1,棒=NW)
root.mainloop()

另外,请注意,最好对IO绑定任务使用线程处理

您的if语句在每次函数调用中最多执行一次。我不确定这是否是故意的,但
urlget()
root.mainloop()
都在
gettheurlanddisplaytTitle()中。也许这就是你的问题所在?(哦,还有一件事,试着给你的函数命名,比如
get\u the\u url\u and\u display\u title()
,以提高可读性。如果你想了解的话,我会给你留下一个链接)。很抱歉,不,我不是故意编辑的。没问题,伙计,它解决了你的问题吗?不,它没有。