Python3 Tkinter rootウィンドウの後ろにメッセージボックスが隠れる

実現したいこと

全画面表示のrootの上にTopleve表示。
その間はrootは操作できないようにする。

そのToplevelの上にメッセージボックスを表示。
その間はToplevelを操作できないようにする。

上に表示しているウィンドウは下に隠れないようにしたい。

前提

環境

$ lsb_release -a No LSB modules are available. Distributor ID: Raspbian Description: Raspbian GNU/Linux 10 (buster) Release: 10 Codename: buster $ python --version Python 2.7.16 $ python3 Python 3.7.3 (default, Jan 22 2021, 20:04:44) [GCC 8.3.0] on linux Type "help", "copyright", "credits" or "license" for more information. >>> import tkinter >>> tkinter.Tcl().eval('info patchlevel') '8.6.9'

rootはroot.attributes("-fullscreen", 1)

該当のソースコード

このコードでの動作結果としては、
実行時にrootの上にtl、Toplevel(以降tl)の上にメッセージボックスが表示される。

[OK] tlをクリック→ メッセージボックスが背面に行かない
[NG] rootをクリック→ メッセージボックスが背面に行く

Python

1import tkinter as tk 2from tkinter import ttk, messagebox 3 4root = tk.Tk()5root.attributes("-fullscreen", True)6 7button = tk.Button(root, text="Button", command=lambda:print("on_button"))8button.grid()9 10tl = tk.Toplevel(root, bd=1, relief="solid")11tl.geometry("400x300+100+100")12tl.overrideredirect(1) # 最小化したくないので追加13#tl.attributes("-topmost", 1)14tl.grab_set() # withdraw時にreleaseするが省略15tl_button = tk.Button(tl, text="button", command=lambda:print("on_tl_button"))16tl_button.grid()17tl.withdraw()18tl.deiconify()19 20messagebox.showerror("Error", "aaaa")21#messagebox.showerror("Error", "aaaa", parent = tl) # 試したがrootより下に表示している模様22 23root.mainloop()

試したこと

既にteratailで同様の質問があり、解決策として提示されていたメッセージボックスの引数にparent=tl を設定するを入れたがrootより背面に表示されてしまう。

parent = root は設定していない時と同じ結果

コメントを投稿

0 コメント