Tkinter Listbox双击打开URL报错:TypeError问题解决
问题解决思路
报错核心原因
- 回调函数参数缺失:Tkinter绑定事件时,会自动向回调函数传递一个
event对象作为参数,但你定义的links()函数未接收该参数,触发类型错误。 - 变量名冲突:后续定义的
links = ["www.google.com"]覆盖了之前的links()函数,导致绑定的回调实际指向列表,触发事件时必然报错。
修复步骤
- 给
links()函数添加event参数(即便不用也要保留,匹配Tkinter的回调规则) - 重命名存储链接的列表,避免与函数名冲突
- 给URL添加
https://前缀,确保浏览器能正确识别
修正后的完整代码
import tkinter as tk import webbrowser # 假设前置变量已定义(根据你的代码补充) my_frame = tk.Tk() solutions = ["示例选项"] len_max = 30 # 创建Listbox组件 box01 = tk.Listbox(my_frame, width=23) box02 = tk.Listbox(my_frame) box03 = tk.Listbox(my_frame, width=len_max) box04 = tk.Listbox(my_frame) box01.grid(row=0, column=0) box02.grid(row=0, column=1, padx=20) box03.grid(row=0, column=2, padx=20) box04.grid(row=0, column=3, padx=20) # 填充第一个Listbox for item in solutions: box01.insert(tk.END, item) # 先定义回调函数,再绑定事件 def links(event): weblink = box04.get(tk.ANCHOR) # 自动补全协议前缀,避免浏览器无法识别 if not weblink.startswith(('http://', 'https://')): weblink = f'https://{weblink}' webbrowser.open_new(weblink) # 绑定事件 box01.bind("<<ListboxSelect>>", product) box02.bind("<<ListboxSelect>>", category) box03.bind("<<ListboxSelect>>", article) box04.bind("<Double-1>", links) # 重命名链接列表,避免与函数名冲突 link_list = [ "www.google.com" ] # 将链接填充到box04 for link in link_list: box04.insert(tk.END, link) my_frame.mainloop()
额外提示
- 确保函数定义在事件绑定之前,否则绑定阶段函数未定义会触发新的报错
- 协议前缀是浏览器识别网址的必要条件,不要省略
内容的提问来源于stack exchange,提问作者NaterVater none
相关产品推荐
相关产品推荐

