Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/290.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 在Tkinter中,如何从小部件中移除焦点?_Python_Tkinter - Fatal编程技术网

Python 在Tkinter中,如何从小部件中移除焦点?

Python 在Tkinter中,如何从小部件中移除焦点?,python,tkinter,Python,Tkinter,我想手动删除小部件的焦点。您可以将焦点转移到另一个虚拟小部件 编辑 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() 聚焦于一个非“聚焦”小部

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

您可以将焦点转移到另一个虚拟小部件

编辑

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\u set()
    w.focus\u force()
    。然而,方法
    w.focus\u force()
    是不礼貌的。最好等待窗口管理器为您提供焦点。将焦点设置为父窗口小部件或根窗口将从目标窗口小部件移除焦点
  • 一些小部件具有
    takefocus
    选项。将takefocus设置为0以使小部件脱离焦点遍历(当用户点击
    键时)

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

使用
c.focus\u set()
c.tk.call('focus',c)
首先聚焦画布窗口本身


那是因为

c.focus()

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

c.focus(id)
将关注画布中具有id
id的项目

c.focus(“”)
将从画布中的任何项目移除焦点


因此(在一些回调中)

c.config(highlightthickness=0)#删除焦点上的突出显示边框
c、 foucs_集()
c、 集中注意力(“”)只是为了确定

之所以c.focus()的功能不同,是因为在Tcl/Tk中有“Primary”命令

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

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

Canvas
类行2549中的
tkinter.py

def焦点(self,*args):
“”“将焦点设置为ARGS中指定的第一项。”“”
返回self.tk.call((self._w,'focus')+args)

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

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

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

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

root.focus_set()

太简单了…

不是虚拟小部件,它必须是真实的小部件。所有小部件都可以接收焦点。“不可聚焦”是什么意思?@Bryan:所有小部件都可以接收聚焦。例如,当您关注条目小部件时,您会看到光标;当你关注一个按钮时,它会产生另一种效果。另一方面,当您关注TK()时,据我所知,它没有任何效果。我不知道如何从小部件中准确地移除焦点,但这可能是一种解决方法。如果您的程序具有焦点(即活动窗口),则程序的某些部分必须具有焦点。我只是把焦点放在一个方便的框架小部件上。它目前似乎没有做任何事情。是的,2018年仍在使用tkinter,在python 3.7.14和TkVersion 8.6上进行了测试