2017-08-27 112 views

回答

0

你可以使用一個簡單的遞歸循環列出您的主窗口中的所有子wigets:

def all_children (window) : 
    _list = window.winfo_children() 

    for item in _list : 
     if item.winfo_children() : 
      _list.extend(item.winfo_children()) 

    return _list 

然後,只需使用此列表:

widget_list = all_children(window) 
for item in widget_list: 
    item.pack_forget() 
+0

謝謝!問題解決完美。 –

+0

不要忘記接受這是一個正確的答案,如果它解決了你的問題! – TmZn

1

你需要做的是建立一個什麼框架到您的主窗口,並將所有要清除的內容放在該框架內的某個點。那麼你只需做frame_name.destroy()

下面的例子有一個按鈕,它創建一個包含多個標籤小部件和一個按鈕的框架。

該按鈕調用一個方法,將摧毀框架及其中的所有內容。

然後你可以用第一個按鈕重新創建框架。

讓我知道如果您有任何問題:

import tkinter as tk 


class ExampleApp(tk.Frame): 
    def __init__(self, master): 
     tk.Frame.__init__(self, master) 
     self.master = master 
     self.some_frame = None 

     tk.Button(self.master, text="Create new frame with widgets!", command = self.create_stuff).pack() 

    def create_stuff(self): 
     if self.some_frame == None: 
      self.some_frame = tk.Frame(self.master) 
      self.some_frame.pack() 

      for i in range(5): 
       tk.Label(self.some_frame, text = "This is label {}!".format(i+1)).pack() 

      tk.Button(self.some_frame, text="Destroy all widgets in this frame!", 
         command= self.destroy_some_frame).pack() 

    def destroy_some_frame(self): 
     self.some_frame.destroy() 
     self.some_frame = None 

root = tk.Tk() 
my_example = ExampleApp(root) 
root.mainloop() 
相關問題