Получение флажка Tkinter State - PullRequest
33 голосов
/ 21 ноября 2010

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

Ответы [ 2 ]

38 голосов
/ 21 ноября 2010

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

проверено => var.get()

не проверено => 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
16 голосов
/ 11 декабря 2016

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

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

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

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

Существует двахитрые вещи, которые я нашел:

  1. Исходное состояние «альтернативное», и этот флаг состояния не очищается при добавлении «выбранного» флага состояния.Итак, если вы хотите переключить свою контрольную кнопку в коде, вам сначала нужно очистить флаг «альтернативный»:

    chk.state(['!alternate'])
    
  2. Если вы отключите / включите контрольную кнопку с помощью

    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).Этот вопрос говорит о различиях между старыми стандартными виджетами и более новыми, "тематическими".

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...