Если вы используете новый * модуль ttk от tkinter, вы можете читать и записывать состояния контрольных кнопок без назначения переменных.
import tkinter
from tkinter import ttk
tkwindow = tkinter.Tk()
chk = ttk.Checkbutton(tkwindow, text="foo")
chk.grid(column=0, row=0)
Обратите внимание, что новый флажок по умолчанию установлен на "alternate"", иногда называемый" наполовину проверенным ", состояние:

Вы можете прочитать текущее состояние, используя метод .state ():
>>> print(chk.state()) # half-checked
('alternate',)
>>> print(chk.state()) # checked
('selected',)
>>> print(chk.state()) # not checked
()
Чтобы установить состояние в коде:
chk.state(['selected']) # check the checkbox
chk.state(['!selected']) # clear the checkbox
chk.state(['disabled']) # disable the checkbox
chk.state(['!disabled','selected']) # enable the checkbox and put a check in it!
А вот удобный способ проверить определенное состояние:
chk.instate(['selected']) # returns True if the box is checked
Существует двахитрые вещи, которые я нашел:
Исходное состояние «альтернативное», и этот флаг состояния не очищается при добавлении «выбранного» флага состояния.Итак, если вы хотите переключить свою контрольную кнопку в коде, вам сначала нужно очистить флаг «альтернативный»:
chk.state(['!alternate'])
Если вы отключите / включите контрольную кнопку с помощью
chk.state(['disabled'])
chk.state(['!disabled'])
тогда все отлично работает.Но, если вы используете эти распространенные альтернативные методы:
chk.config(state=tk.DISABLED)
chk.config(state=tk.NORMAL)
, тогда он повторно устанавливает флаг 'alternate'.
Такое поведение не происходит, если вы присваиваете переменную кнопке check,но затем, если вы хотите присвоить переменную, этот ответ, вероятно, вам не поможет:)
* ttk стал доступен в Python 2.7 (Tk 8.5).Этот вопрос говорит о различиях между старыми стандартными виджетами и более новыми, "тематическими".