【发布时间】:2012-12-01 04:16:49
【问题描述】:
我有一个(第二个)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()
【问题讨论】:
-
您只对主窗口使用
Tk()。请参阅this example 了解类结构。在第三个示例中查找“# Font Size Window”。您想为所有辅助窗口使用TopLevel 窗口。如果要替换主窗口中的内容,请制作一个包含所有内容的框架小部件,您可以将其销毁并替换为包含“新窗口”的新框架。
标签: python user-interface window focus tkinter