lundi 8 novembre 2021

tkinter how delete both checkbox and label if checked box

Im trying to check a checkbox and delete both 'checked box' and 'label' with upper button. They are both created in a loop from the same list. I've tried to build a dictionary with 'buttons' as key and 'result_of_checkboxes' as value and destroy key if value is different from ''. It doesnot work. If buttons are keys, why can't I destroy them? What is the correct approach? Thanks in advance!

from tkinter import *
    
root = Tk()    
root.geometry('400x400')
    
def destroy_button():
    for key, value in dict_check_and_buttons:
        if value != '' and current_var != '':
            key.destroy()      
            current_box.destroy()    

my_friends = ['Donald', 'Daisy', 'Uncle Scrooge']
    
button1= tk.Button(root, text = "delete both if cbox is checked", command = destroy_button).pack()
    
#-----ild checkbuttons and store results in checkbutton_result list

checkbutton_result = []

for index, friend in enumerate(my_friends):
    current_var = tk.StringVar()
    current_box = tk.Checkbutton(root, text= friend,
                                 variable = current_var,
                                 onvalue = friend, offvalue = ""
                                 )
    checkbutton_result.append(current_var) #append on and off results
    current_box.pack()
        
#-----build buttons and store them in buttons_list
buttons_list = []

for index, friend in enumerate(my_friends):
    buttons= tk.Button(root, text = friend).pack()
      
    buttons_list.append(buttons)
        
#-----build a dict with list to say "if  onvalue != '' destroy button"    

dict_check_and_buttons = dict(zip(buttons_list, checkbutton_result))   

root.mainloop()

 

the error is:

Exception in Tkinter callback
Traceback (most recent call last):
  File "c:\python\python38\lib\tkinter\__init__.py", line 1892, in __call__
    return self.func(*args)
  File "<ipython-input-18-954d3a090f2c>", line 7, in destroy_button
    for key, value in dict_check_and_buttons:
TypeError: cannot unpack non-iterable NoneType object



Aucun commentaire:

Enregistrer un commentaire