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

如何解读Tkinter中self.master.focus_get()返回的.!application类路径值

Tkinter焦点相关方法使用说明

输出值含义

你看到的打印结果是Tkinter内部的控件树路径标识,规则如下:

  • 单独的.代表根窗口(即你创建的Tk()实例),是所有控件的顶层父节点,无任何控件获得焦点时就会返回这个值
  • 层级路径用.分隔父子关系,比如.!application.!canvas.!text15的含义是:
    • 根窗口下的!application控件(一般是你自定义的Application类实例)
    • 下一级的!canvas控件(Canvas实例)
    • 下一级的!text15控件(第15个自动生成的Text类实例)
      出现这个输出说明你点击画布后,焦点仍然停留在之前点击的Text控件上——因为Canvas控件默认不会主动抢占焦点,所以焦点没有发生转移,才会出现你说的“留存了文本变量相关内容”的现象。

focus()与focus_get()的区别

两个方法功能完全不同,不要混淆:

  • focus_get():是查询方法,返回当前持有焦点的控件实例,直接print该实例时,Tkinter会默认输出它的内部路径字符串,就是你看到的带点的结果
  • focus()(也可写为focus_set()):是操作方法,作用是将焦点设置到调用该方法的控件上,没有返回值,直接print会得到None,不能用来查询当前焦点。

打印控件绑定对象的常用操作

如果不想只看默认的路径字符串,可以用以下方法获取控件的可识别信息:

  • 自定义控件标识:创建控件时传入name参数,比如text = Text(parent, name='user_input_text'),之后调用focus_get().winfo_name()即可拿到你自定义的名称
  • 查看控件类型:调用type(focus_get())可直接获得控件的类,比如输出<class 'tkinter.Text'>
  • 查看父控件:focus_get().master可直接拿到父控件的实例,focus_get().winfo_parent()可拿到父控件的路径字符串
  • 解决焦点留存问题:在Canvas的点击事件绑定逻辑中加入self.canvas.focus_set(),点击画布时就会主动把焦点转移到画布上,不会再停留在Text控件。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.26 00:06:03