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

Tkinter如何检测鼠标左键点击的Frame,以便向对应Frame添加Label

解决方案

你现有代码的核心问题是事件绑定的标识符使用了HTML转义字符,Tkinter无法识别鼠标点击事件,补充激活状态视觉反馈后可完整实现需求。

完整修改后代码

import tkinter as tk

class new_f:
    def __init__(self,root,num):
        self.new_frame=tk.Frame(root,width=100,height=100,bg='white',bd=3,relief=tk.GROOVE)
        self.new_frame.pack(side=tk.LEFT,fill=tk.X,expand=True)
        self.num=num

    def add_label(self,t):
        self.l1=tk.Label(self.new_frame,bg='white',text=t)
        self.l1.pack()

    def return_instance(self):
        return self.num

class Main_win:
    def __init__(self,root):
        self.root=root
        self.bind_number=0
        self.current_index=0
        self.instance_list=[]

        self.b1=tk.Button(self.root,text='Add Frame',command=self.add_frame_win)
        self.b1.pack(side=tk.BOTTOM)

        self.b2=tk.Button(self.root,text='Add text',command=self.add_text_frame)
        self.b2.pack(side=tk.BOTTOM)

    def return_instance_num(self,num,*args):
        # 所有Frame恢复默认样式
        for item in self.instance_list:
            item.new_frame.config(relief=tk.GROOVE, bg='white')
        # 当前选中Frame设置激活高亮
        self.instance_list[num].new_frame.config(relief=tk.SUNKEN, bg='#e8f4ff')
        self.current_index=num

    def add_frame_win(self):
        new_in=new_f(self.root,self.bind_number)
        self.instance_list.append(new_in)
        # 修正事件绑定标识符为原生<Button-1>
        new_in.new_frame.bind('<Button-1>',lambda evnt: self.return_instance_num(new_in.return_instance()))
        # 第一个新增的Frame默认激活
        if len(self.instance_list) == 1:
            self.return_instance_num(0)
        self.bind_number+=1

    def add_text_frame(self):
        # 空列表判断避免索引报错
        if not self.instance_list:
            return
        instance=self.instance_list[self.current_index]
        instance.add_label('Hello World')

root=tk.Tk()
ob=Main_win(root)
root.mainloop()

关键修改说明

  • 修正事件绑定规则:将原代码中的转义字符&lt;Button-1&gt;替换为Tkinter可识别的原生鼠标左键事件标识符<Button-1>,点击Frame的事件可正常触发
  • 新增激活状态视觉提示:每次选中Frame时先重置所有Frame为默认样式,再将当前选中Frame的边框样式改为凹陷、背景改为淡蓝色,直观区分激活状态
  • 补充边界处理逻辑:新增第一个Frame时默认设为激活状态,点击添加文本按钮时先判断是否存在已创建的Frame,避免空列表索引报错

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.05 11:30:05