我有這樣的代碼:如何處理,當Tkinter的窗口獲得焦點
from tkinter import *
w = Tk()
w.protocol('WM_TAKE_FOCUS', print('hello world'))
mainloop()
它打印hello world
只有一次,然後停止工作。沒有更多hello world
基本上WM_TAKE_FOCUS
不起作用。
我有這樣的代碼:如何處理,當Tkinter的窗口獲得焦點
from tkinter import *
w = Tk()
w.protocol('WM_TAKE_FOCUS', print('hello world'))
mainloop()
它打印hello world
只有一次,然後停止工作。沒有更多hello world
基本上WM_TAKE_FOCUS
不起作用。
您可以將函數綁定到<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()
「請注意,不推薦使用WM_SAVE_YOURSELF,並且Tk應用程序無法正確實現WM_TAKE_FOCUS或_NET_WM_PING,所以WM_DELETE_WINDOW是唯一應該使用的」。 Here's a link! 如果你需要保持Tkinter的集中所有的時間:
w.wm_attributes("-topmost", 1)
做了很好的工作。
我需要做一些事情,當窗口獲得焦點。 –