繁体   English   中英

如何让 tkinter 专注于初始化新 window 的输入框?

[英]How to get tkinter to focus in on entry box on initializing new window?

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

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()

但是,当我运行它并点击按钮时,虽然弹出了一个新的带有输入框的window,但焦点并不在它上面。 我不确定为什么focus_set()在这里不起作用,我们将不胜感激。

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

由于Toplevel没有属性className ,如果要为新的 window 设置标题名称,则需要使用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()

在某个深入的 inte.net 角落(又名谷歌搜索的第五个链接)中找到这个 gem后,我能够解决我的问题。 简单的解决方案是使用focus_force()而不是focus_set() 由于代码的所有 rest 都相同,这个简单的更改可以解决所有问题。

您可以尝试使用focus() function 而不是focus_set()

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM