问题
I have this code:
from tkinter import *
w = Tk()
w.protocol('WM_TAKE_FOCUS', print('hello world'))
mainloop()
It prints hello world
only once, and then it stops working. No more hello world
Basically WM_TAKE_FOCUS
does not work.
回答1:
You can bind a function to the <FocusIn>
event. When you bind to the root window the binding is applied to every widget in the root window, so if you only want to do something when the window as a whole gets focus you'll need to compare event.widget
to the root window.
For example:
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()
回答2:
"Note that WM_SAVE_YOURSELF is deprecated, and Tk apps can't implement WM_TAKE_FOCUS or _NET_WM_PING correctly, so WM_DELETE_WINDOW is the only one that should be used". Here's a link! If you need to keep tkinter focus all the time:
w.wm_attributes("-topmost", 1)
does a pretty good job.
来源:https://stackoverflow.com/questions/44613191/how-to-handle-when-tkinter-window-gets-focus