在Tkinter中如何从窗口小部件中删除焦点?

时间:2010-11-28 22:15:04

标签: python tkinter

我想手动删除小部件中的焦点。

6 个答案:

答案 0 :(得分:5)

您可以专注于另一个虚拟小部件。

修改

from Tkinter import *
master = Tk()
e = Entry(master)
e.pack()
e.focus()
b = Button(master, text="get", width=10, command=callback)
b.pack()
mainloop()

def callback():
    print master.focus()

专注于非'可聚焦'小部件将从另一个小部件中移除焦点。

答案 1 :(得分:2)

  • 将焦点设置为另一个小部件以从目标小部件中移除焦点是一个好主意。有两种方法:w.focus_set()w.focus_force()。但是,方法w.focus_force()是不礼貌的。最好等待窗口管理器为您提供焦点。将焦点设置为父窗口小部件或根窗口会从目标窗口小部件中删除焦点。
  • 有些小部件有takefocus选项。将takefocus设置为0可使您的小部件无法通过焦点遍历(当用户点击<Tab>键时)。

答案 2 :(得分:1)

如果虚拟小部件为Canvas,则c.focus()将不起作用。

使用c.focus_set()c.tk.call('focus',c)首先关注画布窗口本身。


那是因为

c.focus()

  

...返回当前具有焦点的项目的ID,如果没有项目具有焦点,则返回空字符串。 Reference

c.focus(id_)将专注于画布中ID为id_的项目。

c.focus("")将删除画布中任何项目的焦点。


因此(在某些回调中)

c.config(highlightthickness = 0) # to remove the highlight border on focus
c.foucs_set()
c.focus("") # just to be sure

c.focus()功能不同的原因是,在Tcl / Tk的Commands中存在“主要”命令focus

以及特定于画布的窗口小部件命令focus

在Tcl / Tk语法中这不是问题,但在tkinter模块c.focus()中将调用底层特定于画布的foucs

来自tkinter.py类2549行中的Canvas

def focus(self, *args):
        """Set focus to the first item specified in ARGS."""
        return self.tk.call((self._w, 'focus') + args)

答案 3 :(得分:1)

我的解决方案是root.focus(),它将删除小部件焦点。

答案 4 :(得分:0)

如果使用ttk小部件,则可以通过去除颜色来“去除”聚焦环;例如在按钮上:

style = ttk.Style()
style.configure('TButton', focuscolor='')

答案 5 :(得分:0)

所以问题可能是重复的here,但是@Bryan Oakley的答案对我来说在Python 3.8中非常合适

root.focus_set()

太容易了...