Text, Button, Frame – but maybe more importantly this example demo’s the difference between “destroy” and “remove” and how you can reclaim a widget that has been “removed”. You can copy here and paste code directly into idle.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 | #TEST AREA event attribute of event object - Destroy Remove and Recover #standard set up header code 2 from tkinter import * root = Tk() root.attributes( '-fullscreen' , True ) root.configure(background = 'SteelBlue4' ) scrW = root.winfo_screenwidth() scrH = root.winfo_screenheight() workwindow = str ( 1024 ) + "x" + str ( 768 ) + "+" + str ( int ((scrW - 1024 ) / 2 )) + "+" + str ( int ((scrH - 768 ) / 2 )) top1 = Toplevel(root, bg = "light blue" ) top1.geometry(workwindow) top1.title( "Top 1 - Workwindow" ) top1.attributes( "-topmost" , 1 ) # make sure top1 is on top to start root.update() # but don't leave it locked in place top1.attributes( "-topmost" , 0 ) # in case you use lower or lift #exit button - note: uses grid b3 = Button(root, text = "Egress" , command = root.destroy) b3.grid(row = 0 ,column = 0 ,ipadx = 10 , ipady = 10 , pady = 5 , padx = 5 , sticky = W + N) #____________________________ def selfdestroy(event): # using the widget attributes of the event object event.widget.destroy() # this callback destroys a widget def selfremove(event): # this callback removes but saves a widget event.widget.grid_remove() def brecover( self ): # this callback recovers a removed widget - regrids them b3.grid(column = 0 ,row = 2 ,padx = 10 , pady = 10 , ipadx = 5 , ipady = 5 , sticky = W) b4.grid(column = 0 ,row = 3 ,padx = 10 , pady = 10 , ipadx = 5 , ipady = 5 , sticky = W) # just for demo, we create a frame to put other stuff in so we can find children f1 = Frame(top1, width = 800 , height = 500 , bg = "blanched almond" , relief = GROOVE) f1.pack(fill = "both" , expand = "true" ) f1.pack_propagate( False ) # create four almost identical buttons for our demo b1 = Button(f1, width = 20 , height = 2 , text = "Click Me & Kill Me 1" ,bg = "gray90" ) b1.bind( "<1>" , selfdestroy) #note we are not sending back anything b2 = Button(f1, width = 20 , height = 2 , text = "Click Me & Kill Me 2" ,bg = "gray85" ) b2.bind( "<1>" , selfdestroy) b3 = Button(f1, width = 20 , height = 2 , text = "Click Me & Remove Me 3" , bg = "gray80" ) b3.bind( "<1>" , selfremove) b4 = Button(f1, width = 20 , height = 2 , text = "Click Me & Remove Me 4" , bg = "gray75" ) b4.bind( "<1>" , selfremove) b1.grid(column = 0 ,row = 0 ,padx = 10 , pady = 10 , ipadx = 5 , ipady = 5 , sticky = W) b2.grid(column = 0 ,row = 1 ,padx = 10 , pady = 10 , ipadx = 5 , ipady = 5 , sticky = W) b3.grid(column = 0 ,row = 2 ,padx = 10 , pady = 10 , ipadx = 5 , ipady = 5 , sticky = W) b4.grid(column = 0 ,row = 3 ,padx = 10 , pady = 10 , ipadx = 5 , ipady = 5 , sticky = W) # create a text widget which we will populate later l1 = Text(f1, width = 100 , height = 5 , bg = "light goldenrod2" , wrap = WORD) l1.grid(column = 0 ,row = 4 , padx = 10 , pady = 10 ) # create a button and bind it to Button-1 so we get event information in callback b5 = Button(f1, width = 20 , height = 2 , text = "After Removal-\nRecover 3 & 4" , bg = "red" , fg = "white" ) b5.bind( "<1>" , brecover) b5.grid(column = 0 , row = 10 , sticky = SE) # get a list of our frames child widgets and post the names in our text widget kidslist = f1.winfo_children() l1.insert(END, kidslist) #____________________________ root.mainloop() |