[英]In Tkinter how do i remove focus from a widget?
我想手动从小部件中移除焦点。
您可以专注于另一个虚拟小部件。
编辑
from Tkinter import *
def callback():
print master.focus()
master = Tk()
e = Entry(master)
e.pack()
e.focus()
b = Button(master, text="get", width=10, command=callback)
b.pack()
master.mainloop()
专注于非“可聚焦”的小部件将移除另一个小部件的焦点。
w.focus_set()
和w.focus_force()
。 但是,方法w.focus_force()
是不礼貌的。 最好等待窗口管理器给你焦点。 将焦点设置到父窗口小部件或根窗口会从目标窗口小部件中移除焦点。takefocus
选项。 将 takefocus 设置为 0 以使您的小部件脱离焦点遍历(当用户点击<Tab>
键时)。如果虚拟小部件是Canvas
则c.focus()
将不起作用。
使用c.focus_set()
或c.tk.call('focus',c)
首先关注画布窗口本身。
那是因为
c.focus()
... 返回当前具有焦点的项目的 id,如果没有项目具有焦点,则返回空字符串。 参考
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 的命令中有“主要”命令focus
以及 Canvas 特定的小部件命令focus
这在 Tcl/Tk 语法中不是问题,但在c.focus()
模块中c.focus()
将调用底层画布特定的foucs
。
来自Canvas
类 Line 2549 中的tkinter.py
def focus(self, *args):
"""Set focus to the first item specified in ARGS."""
return self.tk.call((self._w, 'focus') + args)
我的解决方案是root.focus()
它将删除小部件焦点。
如果您使用 ttk 小部件,您可以通过移除颜色来“移除”聚焦环; 例如在按钮上:
style = ttk.Style()
style.configure('TButton', focuscolor='')
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.