How to handle, when tkinter window gets focus

心不动则不痛 提交于 2020-05-29 09:07:11

问题


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

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!