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

Tkinter Listbox双击打开URL报错:TypeError问题解决

问题解决思路

报错核心原因

  1. 回调函数参数缺失:Tkinter绑定事件时,会自动向回调函数传递一个event对象作为参数,但你定义的links()函数未接收该参数,触发类型错误。
  2. 变量名冲突:后续定义的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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.03 19:00:58