【Python GUI tkinterサンプル】Frameに追加されている子Widgetを取得し削除する

<tkinterトップページに戻る>

使用するメソッド

子Widgetの取得

・winfo_children()

Widget削除

・destroy()

winfo_children使い方

コンテナとして使ってるWidgetに対してwinfo_childrenを使用すると、

そのWidetに紐づいたWidgetリスト取得できる

あとはそのリストに対してfor文などを使って処理を行う。

親を取得したい場合はこちらの記事

フレームに追加された子Widgetを一気に削除するアプリのサンプル画像

※サンプルコードを実行(ラベル群が1つのフレームにまとめられている)

Frame_winfo_children0

destroyボタンを押下するとフレームで1つにまとめられたラベル群が削除される

Frame_winfo_children1

 

サンプルコード

from tkinter import *
import tkinter.ttk as ttk

class FrameSampleWinfoChildren(ttk.Frame):


    def __init__(self, master):
        super().__init__(master)
        self.pack()
        self.create_widgets()

    def create_widgets(self):
        firstFrame =ttk.Frame(self)
        firstFrame.pack()

        mkbutton = ttk.Button(self,text="make",command = lambda:self.make_child(firstFrame))
        mkbutton.pack(side="left")

        dbutton = ttk.Button(self,text="destroy",command = lambda:self.destroy_child(firstFrame))
        dbutton.pack(side="left")

    def destroy_child(self,frame):
        children = frame.winfo_children()
        for child in children:
            child.destroy()

    def make_child(self,frame):
        label0 = ttk.Label(frame,text="Sample0")
        label0.pack()
        label1 = ttk.Label(frame,text="Sample1")
        label1.pack()
        label2 = ttk.Label(frame,text="Sample2")
        label2.pack()





if __name__ == '__main__':
    master  = Tk()
    master.geometry("600x400")
    master.title("FrameSampleWinfoChildren")
    FrameSampleWinfoChildren(master)
    master.mainloop()

あわせて読みたい