Как передать значение Checkbutton
Метод get() почему-то не работает для Checkbutton
from tkinter import *
destroy_obj = []
def Destroy_object():
for x in destroy_obj:
x.destroy()
def Save_worker(event , name_addw , salary_addw, pasport_addw, sun_m_addw , sun_e_addw, mon_m_addw , mon_e_addw , tue_m_addw, tue_e_addw , wed_m_addw , wed_e_addw , thu_m_addw, thu_e_addw, fri_m_addw , sat_e_addw):
save_savew = Label(text = "name {0} , salary {1} , pasport {2} , days of work Monday : morning - {3} , evenyng - {4}".format(name_addw.get() , salary_addw.get(), pasport_addw.get() , sun_m_addw.get(), sun_e_addw ) )
save_savew.grid(row = 12 , column = 0 )
def Add_worker():
Destroy_object()
#Entry
name1_addw = Label (text = "Name")
salary1_addw = Label (text = "Salary")
pasport1_addw = Label (text = "Pasport")
pasport_addw = Entry()
name_addw = Entry()
salary_addw = Entry()
#Checkbutton
sun_m_addw = BooleanVar()
sun_m_addw.set('no')
sun_m_addw = Checkbutton(text = "Sunday morning" , onvalue = 'yes' , offvalue = 'no')
sun_e_addw = BooleanVar()
sun_e_addw.set('no')
sun_e_addw = Checkbutton(text = "Sunday evenyng" , onvalue = 'yes' , offvalue = 'no')
mon_m_addw = BooleanVar()
mon_m_addw.set('no')
mon_m_addw = Checkbutton(text = "Monday morning" , onvalue = 'yes' , offvalue = 'no' )
mon_e_addw = BooleanVar()
mon_e_addw.set('no')
mon_e_addw = Checkbutton(text = "Monday evenyng" , onvalue = 'yes' , offvalue = 'no')
tue_m_addw = BooleanVar()
tue_m_addw.set('no')
tue_m_addw = Checkbutton(text = "Tuesday morning" , onvalue = 'yes' , offvalue = 'no' )
tue_e_addw = BooleanVar()
tue_e_addw.set('no')
tue_e_addw = Checkbutton(text = "Tuesday evenyng" , onvalue = 'yes' , offvalue = 'no')
wed_m_addw = BooleanVar()
wed_m_addw.set('no')
wed_m_addw = Checkbutton(text = "Wednesday morning" , onvalue = 'yes' , offvalue = 'no' )
wed_e_addw = BooleanVar()
wed_e_addw.set('no')
wed_e_addw = Checkbutton(text = "Wednesday evenyng" , onvalue = 'yes' , offvalue = 'no')
thu_m_addw = BooleanVar()
thu_m_addw.set('no')
thu_m_addw = Checkbutton(text = "Thursday morning" , onvalue = 'yes' , offvalue = 'no' )
thu_e_addw = BooleanVar()
thu_e_addw.set('no')
thu_e_addw = Checkbutton(text = "Thursday evenyng" , onvalue = 'yes' , offvalue = 'no')
fri_m_addw = BooleanVar()
fri_m_addw.set('no')
fri_m_addw = Checkbutton(text = "Friday morning" , onvalue = 'yes' , offvalue = 'no' )
sat_e_addw = BooleanVar()
sat_e_addw.set('no')
sat_e_addw = Checkbutton(text = "Saturday evenyng" , onvalue = 'yes' , offvalue = 'no')
#Button
add_addw = Button (text = "ADD WORKER")
add_addw.bind ("<Button-1>" , lambda btn,
n_a=name_addw,
s_a=salary_addw ,
p_a = pasport_addw,
su_a_m = sun_m_addw ,
su_a_e = sun_e_addw ,
mo_a_e = mon_m_addw,
mo_a_m = mon_e_addw,
tu_a_m = tue_m_addw,
tu_a_e = tue_e_addw,
we_a_m = wed_m_addw,
we_a_e = wed_e_addw,
th_a_m = thu_m_addw,
th_a_e = thu_e_addw,
fr_a_m = fri_m_addw,
sa_a_e = sat_e_addw:
Save_worker(btn, n_a, s_a, p_a, su_a_m , su_a_e , mo_a_m , mo_a_e , tu_a_m , tu_a_e , we_a_m, we_a_e, th_a_m , th_a_e , fr_a_m , sa_a_e))
#Grid
name_addw.grid(row = 0, column = 1)
salary_addw.grid(row = 1 , column = 1)
name1_addw.grid(row = 0 , column = 0)
salary1_addw.grid(row = 1 , column = 0)
add_addw.grid(row = 3, column = 0 )
pasport1_addw.grid(row = 2 , column = 0)
pasport_addw.grid(row = 2 , column = 1 )
sun_m_addw.grid(row = 0 , column = 2)
sun_e_addw.grid(row = 1 , column = 2)
mon_m_addw.grid(row = 2 , column = 2)
mon_e_addw.grid(row = 3 , column = 2)
tue_m_addw.grid(row = 4 , column = 2)
tue_e_addw.grid(row = 5 , column = 2)
wed_m_addw.grid(row = 6 , column = 2)
wed_e_addw.grid(row = 7 , column = 2)
thu_m_addw.grid(row = 8 , column = 2)
thu_e_addw.grid(row = 9 , column = 2)
fri_m_addw.grid(row = 10 , column = 2)
sat_e_addw.grid(row = 11 , column = 2)
#Destroy
destroy_obj.append(pasport1_addw)
destroy_obj.append(pasport_addw)
destroy_obj.append(add_addw)
destroy_obj.append(name1_addw)
destroy_obj.append(salary1_addw)
destroy_obj.append(name_addw)
destroy_obj.append(salary_addw)
destroy_obj.append(sun_m_addw)
destroy_obj.append(sun_e_addw)
destroy_obj.append(mon_m_addw)
destroy_obj.append(mon_e_addw)
destroy_obj.append(tue_m_addw)
destroy_obj.append(tue_e_addw)
destroy_obj.append(wed_m_addw)
destroy_obj.append(wed_e_addw)
destroy_obj.append(thu_m_addw)
destroy_obj.append(thu_e_addw)
destroy_obj.append(fri_m_addw)
destroy_obj.append(sat_e_addw)
root= Tk()
filemenu = Menu(root)
root.config(menu=filemenu)
filemenu.add_command(label = "Add worker" , command = Add_worker)
filemenu.add_command(label = "Worker list")
filemenu.add_command(label = "Schedule")
root.mainloop()
при запуске выдаёт ошибку
Exception in Tkinter callback
Traceback (most recent call last):
File "C:\Programs\Python38-32\lib\tkinter\__init__.py", line 1883, in __call__
return self.func(*args)
File "C:\Python\manager\Main.py", line 73, in <lambda>
Save_worker(btn, n_a, s_a, p_a, su_a_m , su_a_e , mo_a_m , mo_a_e , tu_a_m , tu_a_e , we_a_m, we_a_e, th_a_m , th_a_e , fr_a_m , sa_a_e))
File "C:\Python\manager\Main.py", line 7, in Save_worker
save_savew = Label(text = "name {0} , salary {1} , pasport {2} , days of work Monday : morning - {3} , evenyng - {4}".format(name_addw.get() , salary_addw.get(), pasport_addw.get() , sun_m_addw.get(), sun_e_addw ) )
AttributeError: 'Checkbutton' object has no attribute 'get'
что делать в данной ситуации ? как считать значение checkbutton ?
Ответы (2 шт):
Автор решения: Kers
→ Ссылка
Для получения значения его можно сохранить в переменную check_val.
check_val = IntVar()
sun_m_addw = Checkbutton(text = "Sunday morning" , variable=check_val)
Несколько более упрощенный пример для демонстрации.
from tkinter import *
root = Tk()
root.geometry("100x100")
check_val = IntVar()
btn = Checkbutton(text="test", variable=check_val)
btn.pack()
lb = Label(textvariable=check_val)
lb.place(relx=0.1, rely=0.1,)
root.mainloop()
Автор решения: Давид
→ Ссылка
К сожалению IntVar() принимает только значения типа integer , при попытке присвоить 'yes' или 'no' , выдаёт что-то вроде
Exception in Tkinter callback Traceback (most recent call last): File "C:\Programs\Python38-32\lib\tkinter_init_.py", line 535, in get return self._tk.getint(value) _tkinter.TclError: expected integer but got "yes"
Я нашёл вот такое вот решение :
from tkinter import *
destroy_obj = []
def CheckChange(name):
if name.get() == 1 : x = "yes"
else : x = "no"
return x
def Destroy_object():
for x in destroy_obj:
x.destroy()
def Save_worker(event , name_addw , salary_addw, pasport_addw, sun_m_addw , sun_e_addw, mon_m_addw , mon_e_addw , tue_m_addw, tue_e_addw , wed_m_addw , wed_e_addw , thu_m_addw, thu_e_addw, fri_m_addw , sat_e_addw):
save_savew = Label(text = "name {0} , salary {1} , pasport {2} ,\n days of work\n Sunday : morning - {3} , evenyng - {4} \n Monday : morning - {5} , evenyng - {6} \n Tuesday : morning - {7} , evenyng - {8} \n Wednesday : morning - {9} , evenyng - {10} \n Thursday: morning - {11} , evenyng - {12} \n Friday : morning - {13} \n Saturday : evenyng - {14} \n SAVED ".format(
name_addw.get() ,
salary_addw.get(),
pasport_addw.get() ,
CheckChange(sun_m_addw),
CheckChange(sun_e_addw),
CheckChange(mon_m_addw),
CheckChange(mon_e_addw) ,
CheckChange(tue_m_addw),
CheckChange(tue_e_addw) ,
CheckChange(wed_m_addw) ,
CheckChange(wed_e_addw) ,
CheckChange(thu_m_addw) ,
CheckChange(thu_e_addw) ,
CheckChange(fri_m_addw) ,
CheckChange(sat_e_addw)) )
save_savew.grid(row = 12 , column = 0 )
destroy_obj.append(save_savew)
def Add_worker():
Destroy_object()
#Entry
name1_addw = Label (text = "Name")
salary1_addw = Label (text = "Salary")
pasport1_addw = Label (text = "Pasport")
pasport_addw = Entry()
name_addw = Entry()
salary_addw = Entry()
#Checkbutton
sun_m_addw1 = IntVar()
sun_m_addw = Checkbutton(text = "Sunday morning" , onvalue = 1 , offvalue = 0 , variable=sun_m_addw1 )
sun_e_addw1 = IntVar()
sun_e_addw = Checkbutton(text = "Sunday evenyng" , onvalue = 1 , offvalue = 0 , variable=sun_e_addw1 )
mon_m_addw1 = IntVar()
mon_m_addw = Checkbutton(text = "Monday morning" , onvalue = 1 , offvalue = 0 , variable=mon_m_addw1 )
mon_e_addw1 = IntVar()
mon_e_addw = Checkbutton(text = "Monday evenyng" , onvalue = 1 , offvalue = 0 , variable=mon_e_addw1)
tue_m_addw1 = IntVar()
tue_m_addw = Checkbutton(text = "Tuesday morning" , onvalue = 1 , offvalue = 0 ,variable=tue_m_addw1 )
tue_e_addw1 = IntVar()
tue_e_addw = Checkbutton(text = "Tuesday evenyng" , onvalue = 1 , offvalue = 0 , variable=tue_e_addw1)
wed_m_addw1 = IntVar()
wed_m_addw = Checkbutton(text = "Wednesday morning" , onvalue = 1 , offvalue = 0, variable=wed_m_addw1 )
wed_e_addw1 = IntVar()
wed_e_addw = Checkbutton(text = "Wednesday evenyng" , onvalue = 1 , offvalue = 0 ,variable=wed_e_addw1)
thu_m_addw1 = IntVar()
thu_m_addw = Checkbutton(text = "Thursday morning" , onvalue = 1 , offvalue = 0 ,variable=thu_m_addw1)
thu_e_addw1 = IntVar()
thu_e_addw = Checkbutton(text = "Thursday evenyng" , onvalue = 1 , offvalue = 0,variable=thu_e_addw1)
fri_m_addw1 = IntVar()
fri_m_addw = Checkbutton(text = "Friday morning" , onvalue = 1 , offvalue = 0,variable=fri_m_addw1 )
sat_e_addw1 = IntVar()
sat_e_addw = Checkbutton(text = "Saturday evenyng" , onvalue = 1 , offvalue = 0 ,variable=sat_e_addw1)
#Button
add_addw = Button (text = "ADD WORKER")
add_addw.bind ("<Button-1>" , lambda btn,
n_a=name_addw,
s_a=salary_addw ,
p_a = pasport_addw,
su_a_m = sun_m_addw1 ,
su_a_e = sun_e_addw1 ,
mo_a_e = mon_m_addw1,
mo_a_m = mon_e_addw1,
tu_a_m = tue_m_addw1,
tu_a_e = tue_e_addw1,
we_a_m = wed_m_addw1,
we_a_e = wed_e_addw1,
th_a_m = thu_m_addw1,
th_a_e = thu_e_addw1,
fr_a_m = fri_m_addw1,
sa_a_e = sat_e_addw1:
Save_worker(btn, n_a, s_a, p_a, su_a_m , su_a_e , mo_a_m , mo_a_e , tu_a_m , tu_a_e , we_a_m, we_a_e, th_a_m , th_a_e , fr_a_m , sa_a_e))
#Grid
name_addw.grid(row = 0, column = 1)
salary_addw.grid(row = 1 , column = 1)
name1_addw.grid(row = 0 , column = 0)
salary1_addw.grid(row = 1 , column = 0)
add_addw.grid(row = 3, column = 0 )
pasport1_addw.grid(row = 2 , column = 0)
pasport_addw.grid(row = 2 , column = 1 )
sun_m_addw.grid(row = 0 , column = 2)
sun_e_addw.grid(row = 1 , column = 2)
mon_m_addw.grid(row = 2 , column = 2)
mon_e_addw.grid(row = 3 , column = 2)
tue_m_addw.grid(row = 4 , column = 2)
tue_e_addw.grid(row = 5 , column = 2)
wed_m_addw.grid(row = 6 , column = 2)
wed_e_addw.grid(row = 7 , column = 2)
thu_m_addw.grid(row = 8 , column = 2)
thu_e_addw.grid(row = 9 , column = 2)
fri_m_addw.grid(row = 10 , column = 2)
sat_e_addw.grid(row = 11 , column = 2)
#Destroy
destroy_obj.append(pasport1_addw)
destroy_obj.append(pasport_addw)
destroy_obj.append(add_addw)
destroy_obj.append(name1_addw)
destroy_obj.append(salary1_addw)
destroy_obj.append(name_addw)
destroy_obj.append(salary_addw)
destroy_obj.append(sun_m_addw)
destroy_obj.append(sun_e_addw)
destroy_obj.append(mon_m_addw)
destroy_obj.append(mon_e_addw)
destroy_obj.append(tue_m_addw)
destroy_obj.append(tue_e_addw)
destroy_obj.append(wed_m_addw)
destroy_obj.append(wed_e_addw)
destroy_obj.append(thu_m_addw)
destroy_obj.append(thu_e_addw)
destroy_obj.append(fri_m_addw)
destroy_obj.append(sat_e_addw)
root= Tk()
filemenu = Menu(root)
root.config(menu=filemenu)
filemenu.add_command(label = "Add worker" , command = Add_worker)
filemenu.add_command(label = "Worker list")
filemenu.add_command(label = "Schedule")
root.mainloop()