Как передать значение 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()
→ Ссылка