You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何将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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.08 10:10:15