我正在尝试创建一个窗口小部件,它是屏幕上的活动窗口(我想要它,这样如果你按Enter,它就退出窗口)。我已经将键绑定到了小部件上,但似乎无法将窗口作为计算机上的主窗口我正在使用记事本++运行我的程序(我有这个特定程序的快捷方式,因为我会经常使用它)。
这是我的代码:

def main():
    root = Tk(className = ' Module Opener')
    app = GetFileName(root)
    root.rowconfigure(0, weight = 1)
    root.columnconfigure(0, weight = 1)
    root.bind('<Return>', (lambda e, b=app.goButton: b.invoke()))
    root.mainloop()
    f, pythonType = app.fileName, app.pythonType
    if f[-3:] != '.py': f += '.py'
    moduleFile = getFilePath(f, pythonType)
    if not moduleFile is None:
        subprocess.call([r"C:\Program Files\Notepad++\notepad++.exe", moduleFile])
    else:
        root.withdraw()
        finalRoot = Toplevel(root)
        finalRoot.grab_set() # I thought this would make it active
        finalApp = FileNotExist(finalRoot, f)
        finalRoot.rowconfigure(0, weight = 1)
        finalRoot.columnconfigure(0, weight = 1)
        finalRoot.bind('<Return>', (lambda e, b=finalApp.okButton: b.invoke()))
        finalRoot.mainloop()

我希望当它打开时,如果我按回车键,它会执行我的命令;但是,我必须先单击窗口,使它变为活动状态,然后它才能工作。
我尝试了各种方法,如ToplevelfinalRoot.lift()finalRoot.focus_set()/finalRoot.grab_set()(我从another question中看到了这些方法)和finalRoot.grab_set_global()
程序启动时,第一个窗口finalRoot.focus()处于活动状态。但是,Tk()不是。我还尝试了创建两个Toplevel()(销毁Tk(),然后创建root作为新的finalRoot实例),但这并没有起到同样的作用我该怎么做?谢谢!

最佳答案

…但是,我必须先在窗口中单击,使其处于活动状态,然后才能工作。
我刚遇到这个问题,当我在研究解决方案时,我发现了这个线程。我正在使用Windows7专业版。我只需要同时调用grab_set()focus(),它就帮我解决了这个问题。您已经有了finalRoot.grab_set(),只需添加:

finalRoot.focus()

对我来说很管用。

07-24 19:42