現在、多くのtkinterフレームを使用するプログラムを実装しています。サブフレームが開かれている間は、スーパーフレームをユーザーにロックしたい(そうでなければ機能しません)。いくつかの研究の後、私はgrab_setとgrab_releaseメソッドがかなりうまく動作することを発見しました。Tkinterフォーカスがaskstring後に失われました
しかし、(Toplevelによってインスタンス化された)サブフレームがaskstringを呼び出すと、グラブは「losed」となり、ユーザーはスーパーレベルウィンドウと再び対話できます。ユーザが「ASDF」のサブフレームが開かれている間の期間のためにロックされますを含むフレームを「ASDF」リンクをクリックしてサブフレームを開いたら
import tkinter as tk
import tkinter.simpledialog
root = tk.Tk()
def open_sublevel():
tl = tk.Toplevel(root)
def ask():
print(tk.simpledialog.askstring("askstring", "askstring"))
tk.Button(tl, text="ask", command=ask).pack()
tl.grab_set()
root.wait_window(tl)
tl.grab_release()
print("release")
tk.Button(root, text="asdf", command=open_sublevel).pack()
tk.mainloop()
:例では、この(非常に簡略化されたコード)であろう。しかしながら、ユーザがサブフレーム内の「尋ねる」ボタンを選択すると、この「ロック」が何とか消える。
[MCVE]を提供してください。また、どのプラットフォームを使用しているかを知るのにも役立ちます。 –
まあ、最小限の例ではありません...スーパーレベルモジュールは、私が書いた他のさまざまなモジュールをインポートするので、私はすべてのモジュールとサブモジュールを投稿する必要があります。 – PfannkuchenXD
私はできるだけ単純化して、コードをオリジナルの投稿(すべてのPython 3.Xでコンパイル可能)に投稿しました。私はWindows10で作業しています。 – PfannkuchenXD