如何让tkinter在初始化新窗口时关注输入框?

2024-06-06 20:09:51 发布

您现在位置:Python中文网/ 问答频道 /正文

我正在尝试使用tkinter创建一个新窗口,并在其输入框上设置焦点。我正在使用以下代码,据我所知,这些代码应该可以工作:

import tkinter as tk

m = tk.Tk(className="My window")
def clickclack():
    new = tk.Tk(className="New")
    entr = tk.Entry(new)
    entr.grid()
    entr.focus_set()

butt = tk.Button(m, text="My button", width=25, command=clickclack)
butt.grid()
m.mainloop()

然而,当我运行它并点击按钮时,虽然会弹出一个带有输入框的新窗口,但焦点并不在它上面。我不知道focus_set()为什么不在这里工作,如果有任何帮助,我们将不胜感激


Tags: 代码newtkintermytkgrid焦点focus
3条回答

您可以尝试使用focus()函数,而不是focus\u set()

entr = tk.Entry(new)
entr.grid()
entr.focus()

不建议同时使用多个Tk实例。另一个窗口应使用Toplevel实例。(可能会导致StringVar()(等等)无法正常工作)

由于Toplevel没有属性className,如果要设置新窗口的标题名,需要使用Toplevel().title("xxxxx")

另外,您可以先使Toplevel聚焦,然后使Entry小部件聚焦

尝试:

import tkinter as tk

m = tk.Tk(className="My window")
def clickclack():
    new = tk.Toplevel()
    new.title("New") # set title
    entr = tk.Entry(new)
    entr.grid()
    new.focus() # make the window focused
    entr.focus()

butt = tk.Button(m, text="My button", width=25, command=clickclack)
butt.grid()
m.mainloop()

在互联网的某个角落(又称谷歌搜索的第五个链接)找到this gem后,我解决了我的问题。简单的解决方法是使用focus_force()而不是focus_set()。在所有其他代码都相同的情况下,这个简单的更改修复了所有问题

相关问题 更多 >