4

Toplevel画面上でアクティブなウィンドウであるウィジェットを作成しようとしています( を押すEnterとウィンドウを終了するようにしたいです。キーはすでにウィジェットにバインドされていますが、ウィンドウを取得できないようですコンピューターのメイン ウィンドウにするには、Notepad++ を使用してプログラムを実行しています (この特定のプログラムを頻繁に使用するため、ショートカットを用意しています)。

これが私のコードです:

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()

開いたときに を押すEnterと、コマンドが実行されるようにしたい。ただし、最初にウィンドウをクリックしてアクティブにし、それから機能させる必要があります。

、、/ (これらのメソッドは別の質問で見ました)、およびなどfinalRoot.lift()、さまざまなことを試しました。finalRoot.focus_set()finalRoot.grab_set()finalRoot.grab_set_global()finalRoot.focus()

プログラムが起動すると、最初のウィンドウTk()がアクティブになります。ただし、そうでToplevel()はありません。Tk()また、 を 2 つ作成(破棄してから新しいインスタンスとしてroot作成)しようとしましたが、これも同様に機能しませんでした。これどうやってするの?ありがとう!finalRootTk()

4

7 に答える 7

1

私は同じ問題を抱えていて、見つけることができるすべてを試しました。残念ながら、答えはあなたのOSに依存するということです. 私のウィンドウは古い Mac に自動的にフォーカスされますが、OSX Lion にはフォーカスされません。リストするコマンドの一部は、OS にも依存します。

于 2013-04-19T17:28:03.870 に答える