让Tkinter控件获取焦点

13 投票
2 回答
33890 浏览
提问于 2025-04-16 04:51

我有一个脚本,它使用Tkinter来弹出一个窗口显示消息。请问我怎么才能确保这个窗口是最前面的,这样用户就不会错过它,并且必须主动关闭这个窗口。代码如下:

root = Tk()
to_read = "Stuff" 
w = Label(root, text=to_read)
w.pack()
root.mainloop()

2 个回答

2

对我有效的方法是:

root.wm_attributes("-topmost", 1)
root.focus_force()

我在win32中找到这个和其他一些方法,可以在 这里 查看。

21

你可以使用 focus_force 方法。看看下面的内容:

但是要注意文档中的说明:

w.focus_force()

这个方法会强制把输入焦点放到这个小部件上。这有点不礼貌。最好还是等窗口管理器来给你焦点。下面还有 .grab_set_global() 的相关内容。

更新:这个方法应该可以在 root 上使用。比如,试试运行下面的代码。它会创建一个窗口,你可以在窗口之间切换焦点。5秒后,它会尝试抢占焦点。

from Tkinter import *

root = Tk()
root.after(5000, lambda: root.focus_force())
root.mainloop()

撰写回答