当tkinter窗口获得焦点时如何处理

时间:2017-06-18 08:37:28

标签: python tkinter focus protocols

我有这段代码:

from tkinter import *
w = Tk()
w.protocol('WM_TAKE_FOCUS', print('hello world'))
mainloop()

它仅打印hello world一次,然后停止工作。不再hello world基本上WM_TAKE_FOCUS不起作用。

2 个答案:

答案 0 :(得分:5)

您可以将函数绑定到<FocusIn>事件。当您绑定到根窗口时,绑定将应用于根窗口中的每个窗口小部件,因此,如果您只想在整个窗口获得焦点时执行某些操作,则需要将event.widget与根窗口进行比较

例如:

import Tkinter as tk

def handle_focus(event):
    if event.widget == root:
        print("I have gained the focus")

root = tk.Tk()
entry1 = tk.Entry(root)
entry2 = tk.Entry(root)

entry1.pack()
entry2.pack()

root.bind("<FocusIn>", handle_focus)

root.mainloop()

答案 1 :(得分:0)

&#34;请注意,不推荐使用WM_SAVE_YOURSELF,并且Tk应用无法正确实现WM_TAKE_FOCUS或_NET_WM_PING,因此WM_DELETE_WINDOW是唯一应该使用的#34;。 在这里a link! 如果你需要一直保持tkinter焦点:

w.wm_attributes("-topmost", 1)

做得很好。