from tkinter import *
root = Tk()
users = ['Anne', 'Bea', 'Chris', 'Bob', 'Helen']
selected_users=[]
for x in range(len(users)):
l = Checkbutton(root, text=users[x][0], variable=users[x])
l.pack(anchor = 'w')
root.mainloop()
I have this sample code, I need to make multiple selections in that users list, after I hit OK, it stores checked value into another list named selected_users for later use.
For example, when I run this code, a checkbox window pops out, and I tick Anne,Bob, click OK. selected_users is now ['Anne','Bob']. And Window disappears
Advertisement
Answer
You can do this:
from tkinter import *
root = Tk()
users = ['Anne', 'Bea', 'Chris', 'Bob', 'Helen']
selected_users=[]
for x in range(len(users)):
l = Checkbutton(root, text=users[x][0], variable=users[x],command=lambda x=users[x]:selected_users.append(x))
l.pack(anchor = 'w')
Button(root,text="Ok",command=lambda: [print(selected_users),root.destroy()]).pack()
root.mainloop()
This will add the value to the list and when you hit Ok the window will disappear.
Adding more functionality to the program:
from tkinter import *
root = Tk()
users = ['Anne', 'Bea', 'Chris', 'Bob', 'Helen']
users_l=[str(i) for i in range(len(users))]
selected_users=[]
def add_remove(user,var):
if var.get()==0:
try:
selected_users.remove(user)
except KeyError:
pass
else:
selected_users.append(user)
for x in range(len(users)):
users_l[x]=IntVar(0)
l = Checkbutton(root, text=users[x], variable=users_l[x],offvalue=0,onvalue=1,command=lambda x=users[x],y=users_l[x]:add_remove(x,y))
l.pack(anchor = 'w')
Button(root,text="Ok",command=lambda: [print(selected_users),root.destroy()]).pack()
root.mainloop()