Подтвердить что ты не робот

Получение состояния Tkinter Check Box

Как установить состояние Tkinter? По состоянию я имею в виду получить или нет в нем отметку или нет.

4b9b3361

Ответ 1

Когда вы создаете его, он принимает аргумент ключевого слова variable. Передайте его IntVar из Tkinter. Проверка или снятие флажка устанавливает значение, содержащееся в var, в соответствующее логическое состояние. Доступ к нему можно получить как var.get():

checked = > var.get()

not checked = > not var.get()

>>> root = Tkinter.Tk()
>>> var = Tkinter.IntVar()
>>> chk = Tkinter.Checkbutton(root, text='foo', variable=var)
>>> chk.pack(side=Tkinter.LEFT)
>>> var.get()  #unchecked
0
>>> var.get()  #checked
1

Ответ 2

Если вы используете новый модуль * ttk из tkinter, вы можете читать и записывать состояния контрольной кнопки без назначения переменных.

import tkinter
from tkinter import ttk
tkwindow = tkinter.Tk()
chk = ttk.Checkbutton(tkwindow, text="foo")
chk.grid(column=0, row=0)

Обратите внимание, что по умолчанию новый флажок установлен на "alternate", иногда называемый "half-checked", state:

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

Есть две сложные вещи, которые я нашел:

  • Исходное состояние "alternate", и этот флаг состояния не очищается при добавлении "выбранного" состояния. Итак, если вы хотите переключить свою контрольную кнопку в коде, сначала нужно очистить флаг "alternate":

    chk.state(['!alternate'])
    
  • Если вы отключите/активируете контрольную кнопку, используя

    chk.state(['disabled'])
    chk.state(['!disabled'])
    

    тогда все работает нормально. Но если вы используете эти общие, альтернативные методы:

    chk.config(state=tk.DISABLED)
    chk.config(state=tk.NORMAL)
    

    то он перезапускает флаг "alternate".

    Такое поведение не происходит, если вы назначаете переменную контрольной панели, но тогда, если вы хотите назначить переменную, этот ответ, вероятно, вам не поможет:)


* ttk стал доступен в Python 2.7 (Tk 8.5). Этот вопрос говорит о различиях между старыми стандартными виджетами и более новыми "тематическими" .