如何将CustomTkinter输入框参数传递给Python函数?
解决CustomTkinter按钮点击时参数传递错误的问题
错误原因
你设置按钮的command=Download时,点击按钮会直接调用Download(),但你的Download函数要求必须传入link参数,因此触发TypeError。
两种解决方案
方案1:用lambda表达式传递参数
修改按钮的command属性,通过lambda表达式获取输入框的内容并传给Download函数:
button = customtkinter.CTkButton(master=frame, text="Download", command=lambda: Download(entry.get()))
完整修改后的代码:
import customtkinter from pytube import YouTube customtkinter.set_appearance_mode("dark") customtkinter.set_default_color_theme("dark-blue") root = customtkinter.CTk() root.geometry("500x350") def Download(link): if not link: print("请输入YouTube链接!") return youtubeObject = YouTube(link) youtubeObject = youtubeObject.streams.get_audio_only() try: youtubeObject.download() print("下载成功!") except Exception as e: print(f"下载出错:{str(e)}") frame = customtkinter.CTkFrame(master=root) frame.pack(pady=20, padx=60, fill="both", expand=True) entry = customtkinter.CTkEntry(master=frame, placeholder_text="URL") entry.pack(pady=12, padx=10) # 用lambda传递输入框内容 button = customtkinter.CTkButton(master=frame, text="Download", command=lambda: Download(entry.get())) button.pack(pady=12, padx=10) root.mainloop()
方案2:修改Download函数直接获取输入框内容
让Download函数不需要参数,直接在函数内部读取输入框的文本:
def Download(): link = entry.get() if not link: print("请输入YouTube链接!") return youtubeObject = YouTube(link) youtubeObject = youtubeObject.streams.get_audio_only() try: youtubeObject.download() print("下载成功!") except Exception as e: print(f"下载出错:{str(e)}")
对应的按钮设置改为:
button = customtkinter.CTkButton(master=frame, text="Download", command=Download)
额外优化提示
- 增加了空链接判断,避免用户未输入就点击下载的情况
- 把原有的
except:改为except Exception as e,可以打印具体错误信息,方便排查问题
内容的提问来源于stack exchange,提问作者predrag
相关产品推荐
相关产品推荐

