I\'d like to remove focus from a widget manually.
If the dummy widget is Canvas
then c.focus()
will not work.
use c.focus_set()
or c.tk.call('focus',c)
to first focus on the canvas window itself.
That's because
c.focus()
... returns the id for the item that currently has the focus, or an empty string if no item has the focus. Reference
c.focus(id_)
will focus on the item having id id_
within the canvas.
c.focus("")
will remove the focus from any item in the canvas.
Hence (within some callback)
c.config(highlightthickness = 0) # to remove the highlight border on focus
c.foucs_set()
c.focus("") # just to be sure
The reason c.focus()
functions differently is that within Tcl/Tk's Commands there's the "Primary" Command focus
as well as the Canvas-specific Widget Command focus
That's not an issue within the Tcl/Tk syntax but in the tkinter module c.focus()
will call the underlying canvas-specific foucs
.
From tkinter.py
within the Canvas
class Line 2549
def focus(self, *args):
"""Set focus to the first item specified in ARGS."""
return self.tk.call((self._w, 'focus') + args)