打开窗口并聚焦文本框tkin

2024-09-30 14:16:29 发布

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

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

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

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

他们没有做我想做的事。在

编辑: 相反,.focus_set()在(并且仅当)关闭main窗口时,.focus_set()会引发一个错误: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()

Tags: selfmasterfieldtkinterplacewindow焦点focus
1条回答
网友
1楼 · 发布于 2024-09-30 14:16:29

事实证明,您只需调用辅助窗口的^{}方法,然后调用小部件的^{}方法:

toplevel.deiconify()
text.focus_set()

以下是针对Windows的原始解决方案(不再推荐):

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

相关问题 更多 >

    热门问题