Skip to main content
 首页 » 编程设计

python之打开窗口并聚焦文本框 tkinter

2025年05月04日7cloudgamer

我有一个(第二个)tkinter 窗口,当它打开时,没有获得焦点,而是第一个窗口保持焦点(尽管第二个窗口出现在另一个窗口的前面)。 它包含一个我希望能够输入的文本框,但我必须双击它才能输入。

如何在打开窗口时聚焦文本框?

我的尝试: textbox.focus_set(), window.grab_set(), window.focus_set()

他们都没有做我想做的。

编辑: 相反,.focus_set() 在(且仅在)关闭 main 窗口时引发错误:can't invoke "focus"command: application has been destroyed

这是我当前的代码(tkWin 是主窗口,tkcWin 是第二个窗口):

def click(self, field): 
    import _tkinter 
    if field != None: 
        try: 
            self.tkcWin = Tk()#creating window 
            self.tkcWin.focus() 
            self.tkcWin.title(field) 
            self.tkcWin.geometry('300x100') 
            self.mainframe = Frame(master=self.tkcWin,background="#60BF98") 
            self.mainframe.place(x=0, y=0, width=300, height=300) 
            self.textb = Text(master=self.mainframe) 
            self.textb.place(x=0, y=50) 
            self.textb.bind("<Return>",lambda a: self.setM(field)) 
            self.textb.bind("<Return>",lambda a: self.tkcWin.destroy(),True) 
            self.tkcWin.grab_set() 
            self.tkWin.wait_window(self.tkcWin) 
            self.textb.focus_set() 
            hwnd = self.tkcWin.winfo_id() 
            ctypes.windll.user32.SetFocus(hwnd) 
            self.tkcWin.mainloop() 
        except _tkinter.TclError: 
            self.tkcWin.destroy() 

请您参考如下方法:

事实证明,您可以简单地调用辅助窗口的 deiconify()方法,然后是小部件的 focus_set()方法:

toplevel.deiconify() 
text.focus_set() 

这是 Windows 的原始解决方法(不再推荐):

首先在顶部添加import ctypes。
继续像你一样关注你的小部件:text.focus_set()
获取第二个窗口的 hwnd:top_hwnd = toplevel.winfo_id()
最后激活第二个窗口:ctypes.windll.user32.SetFocus(top_hwnd)