为什么对Python应用程序的第二次调用没有';我没有键盘焦点

为什么对Python应用程序的第二次调用没有';我没有键盘焦点,python,tkinter,Python,Tkinter,如果我调用这个类两次,键盘焦点第一次转到窗口时。第二次没有。逃生键用于关闭车窗,它在第一时间起作用。第二次必须用鼠标点击窗口才能使用escape键。焦点没有被传回是不是有什么问题?我已经多次遇到这个问题,但在这里,我尽可能简单地抓住了它。代码如下: from Tkinter import * class Dialog(): # imagine this having buttons and stuff def __init__(self): root = Tk()

如果我调用这个类两次,键盘焦点第一次转到窗口时。第二次没有。逃生键用于关闭车窗,它在第一时间起作用。第二次必须用鼠标点击窗口才能使用escape键。焦点没有被传回是不是有什么问题?我已经多次遇到这个问题,但在这里,我尽可能简单地抓住了它。代码如下:

from Tkinter import *

class Dialog(): # imagine this having buttons and stuff
    def __init__(self):
        root = Tk()
        root.bind_all('<Escape>', lambda event :root.destroy())
        root.mainloop()

# this simulates running a python terminal app which invokes a dialog at some point
Dialog() # this one accepts the key action
Dialog() # this one needs a mouse click in the window first
从Tkinter导入*
class Dialog():#想象一下这里有按钮之类的东西
定义初始化(自):
root=Tk()
root.bind_all(“”,lambda事件:root.destroy())
root.mainloop()
#这模拟运行python终端应用程序,该应用程序在某个点调用对话框
Dialog()#这个接受键操作
Dialog()#首先需要在窗口中单击鼠标

我刚刚运行了代码,在Windows7中,它也没有聚焦

你用什么操作系统运行它

此外,您还可以通过插入这一行将焦点强制到根窗口


root.focus\u force()

在使用X11作为窗口服务器并使用X终端或常规终端的Mac上,焦点始终转到对话框窗口,因此escape键两次都有效。在从cmd.exe终端运行的windows XP上,焦点仅在第一次转到对话框。第二次必须先单击窗口。但是,使用root.focus\u force()可以使它在任何地方都能工作。非常感谢

但是为什么退出应用程序只是为了重新启动它呢?这是对这个问题的过度简化。所以不要过度分析:)在我的真实案例中,我在终端窗口中运行一个文本应用程序,当我按下escape键时,我想打开一个包含选择的Tkinter窗口。这是可行的,但弹出窗口没有接收到键盘焦点,因此我无法使用键盘键在新窗口中进行选择。为了预测下一个问题,终端窗口在速度和稳定性方面比Tkinter文本窗口要好得多。真正的问题是,我如何确保新窗口将获得键盘焦点?