このクラスを2回呼び出すと、初めてキーボードフォーカスがウィンドウに表示されます。 2度目はそうしない。エスケープキーはウィンドウを閉じるために使用され、初めて動作します。エスケープキーが機能するには、ウィンドウをマウスでクリックする必要があります。フォーカスが戻ってこない何かが続いていますか?私はこの問題に何度もぶつかってきましたが、ここで私はできるだけシンプルにそれを見つけました。コードは次のとおりです。2回目のPythonアプリケーションの呼び出しでキーボードフォーカスが得られない
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ウィンドウをいくつかの選択肢で表示したいと思っています。これは動作しますが、キーボードのフォーカスを受け取っていないので、キーボードのキーを使用して新しいウィンドウを選択することはできません。次の質問を予期するためには、速度と安定性の面でTkinterテキストウィンドウよりもはるかに優れています。実際の質問は、新しいウィンドウにキーボードのフォーカスが得られることをどうすれば保証できますか? – strawbot