Tkinterでウィジェットをgrid()などで配置したり、grid_forget()などで非表示にしたりします。
今、ウィジェットが表示状態か非表示状態かを取得する方法ありますか?
自前のフラグを使うしかないでしょうか?
気になる質問をクリップする
クリップした質問は、後からいつでもMYページで確認できます。
またクリップした質問に回答があった際、通知やメールを受け取ることができます。
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。

回答2件
0
grid, pack, placeで既に配置されているかを取得したい
pack_slaves()
などを利用する方法もあるかと思います。
python
1import tkinter as tk 2 3def is_packed(widget): 4 parent = widget.nametowidget(widget.winfo_parent()) 5 return widget in parent.grid_slaves() + parent.pack_slaves() + parent.place_slaves() 6 7root = tk.Tk() 8label = tk.Label(root, text="Hello") 9 10print(is_packed(label)) 11label.pack() 12print(is_packed(label)) 13 14root.mainloop() 15 16# False 17# True
投稿2023/05/02 08:58
編集2023/05/02 09:25総合スコア21106
0
ベストアンサー
winfo_viewable
で取得することができます。
Python
1import tkinter as tk 2 3root = tk.Tk() 4label = tk.Label(root, text="Hello") 5 6def check_visible(): 7 if label.winfo_viewable(): 8 print("Label is visible") 9 label.pack_forget() 10 else: 11 print("Label is not visible") 12 label.pack() 13 14button = tk.Button(root, text="Check", command=check_visible) 15button.pack() 16 17root.mainloop()
投稿2023/05/02 07:50
総合スコア38352
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
回答ありがとうございます。
ウィジェットにupdateかからないとwinfo_viewable()反映されないんですね。
(pack()しただけだと0のままでした。)

あなたの回答
tips
太字
斜体
打ち消し線
見出し
引用テキストの挿入
コードの挿入
リンクの挿入
リストの挿入
番号リストの挿入
表の挿入
水平線の挿入
プレビュー
質問の解決につながる回答をしましょう。 サンプルコードなど、より具体的な説明があると質問者の理解の助けになります。 また、読む側のことを考えた、分かりやすい文章を心がけましょう。
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。