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

Tkinter开发问题:双击TreeView的create项无法触发feeds()函数

解决Tkinter TreeView双击项无法触发函数的问题

问题分析

你尝试的绑定代码存在几个关键问题:

  • 类内的treeview.bind语句位置错误,未放在类的初始化方法中,导致执行时找不到self
  • 事件处理函数未判断双击的是否是目标项,也没有调用feeds()函数
  • feeds()里新建了tk.Tk()实例,Tkinter程序应保持单一主窗口,弹窗需用tk.Toplevel()

修正后的完整代码

from tkinter import *
import tkinter as tk
from tkinter import ttk
from tkinter.scrolledtext import ScrolledText

def feeds():
    # 用Toplevel替代Tk(),避免多主窗口异常
    root = tk.Toplevel()
    text = ScrolledText(root, width=50, height=10)
    text.pack()
    feed_list = ['FEED1','FEED2','FEED3']
    for feed in feed_list:
        cb = tk.Checkbutton(text, text=feed, bg='white', anchor='w')
        text.window_create('end', window=cb)
        text.insert('end', '\n')

def on_double_click(event):
    # 获取双击的TreeView项
    item = event.widget.selection()[0]
    # 获取项的文本内容
    item_text = event.widget.item(item, 'text')
    # 判断是否为目标项,触发对应函数
    if item_text == 'create':
        feeds()

screen = tk.Tk()
screen.state("zoomed")
screen.title("TEST")

tabControl = ttk.Notebook(screen)
tab1 = ttk.Frame(tabControl)
tabControl.add(tab1, text='Ration')
tabControl.grid(padx=20,pady=40,ipadx=250 ,ipady=100)

ttk.Label(tab1, text="Animal Categories", font=16).place(relx=0.086,rely=0.15,anchor='center')
treeview = ttk.Treeview(tab1)
treeview.grid(padx=30, pady=150, ipadx=200, ipady=85)
treeview.insert('', 'end', 'i1', text='Lactating ewes')
treeview.insert(parent='i1',index='end',text='create')

# 绑定双击事件到TreeView控件
treeview.bind("<Double-1>", on_double_click)

screen.mainloop()

关键修改说明

  • 将事件处理改为独立函数,直接绑定到TreeView,避免类写法的初始化错误
  • 通过event.widget获取触发事件的控件,减少全局变量依赖
  • 增加项文本判断,仅双击"create"时才调用feeds()
  • 替换弹窗创建方式为Toplevel(),符合Tkinter单主窗口规范
  • 简化feeds()内的循环逻辑,直接遍历列表元素,无需手动维护索引

内容的提问来源于stack exchange,提问作者Spyros

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.13 12:25:19