Checkbutton

Последнее обновление: 12.09.2022

Элемент Checkbutton представляет собой флажок, который может находиться в двух состояниях: отмеченном и неотмеченном.

Конструктор Checkbutton принимает ряд параметров, отметим основные из них:

  • command: ссылка на функцию, которая вызывается при нажатии на флажок

  • cursor: курсор при наведении на элемент

  • image: графическое изображение, отображаемое на элементе

  • offvalue: значение флажка в неотмеченном состоянии, по умолчанию равно 0

  • onvalue: значение флажка в отмеченном состоянии, по умолчанию равно 1

  • padding: отступы от текста до границы флажка

  • state: состояние элемента, может принимать значения NORMAL (по умолчанию), DISABLED и ACTIVE

  • text: текст элемента

  • textvariable: привязанный к тексту объект StringVar

  • underline: индекс подчеркнутого символа в тексте флажка

  • variable: ссылка на переменную, как правило, типа IntVar, которая хранит состояние флажка

  • width: ширина элемента

Создадим простейший флажок:

from tkinter import *
from tkinter import ttk

root = Tk()
root.title("METANIT.COM")
root.geometry("250x200")

enabled = IntVar()
 
enabled_checkbutton = ttk.Checkbutton(text="Включить", variable=enabled)
enabled_checkbutton.pack(padx=6, pady=6, anchor=NW)
 
enabled_label = ttk.Label(textvariable=enabled)
enabled_label.pack(padx=6, pady=6, anchor=NW)

root.mainloop()

Отличительной чертой Checkbutton является возможность привязки к переменной через параметр variable, который представляет значение флажка. Здесь данный параметр привязан к переменной enabled типа IntVar. В отмеченном состоянии привязанный объект IntVar имеет значение 1, а в неотмеченном - 0. В итоге через IntVar мы можем получать значение, указанное пользователем.

Checkbutton в tkinter и Python

Обработка изменения флажка

С помощью параметра command можно установить функцию, которая будет вызываться при изменении состояния флажка:

from tkinter import *
from tkinter import ttk
from tkinter.messagebox import showinfo

root = Tk()
root.title("METANIT.COM")
root.geometry("250x200")

def checkbutton_changed():
    if enabled.get() == 1:
        showinfo(title="Info", message="Включено")
    else:
        showinfo(title="Info", message="Отключено")

enabled = IntVar()
 
enabled_checkbutton = ttk.Checkbutton(text="Включить", variable=enabled, command=checkbutton_changed)
enabled_checkbutton.pack(padx=6, pady=6, anchor=NW)

root.mainloop()

Здесь при изменении состояния флажка срабатывает функция checkbutton_changed. В ней в зависимости от состояния флажка (а точнее в зависимости от значения переменной enabled) с помощью встроенной функции showinfo() отображаем сообщение о состоянии флажка:

изменение состояния флажка Checkbutton в tkinter и Python

onvalue и offvalue

Параметры onvalue и offvalue позволяют задать значение флажка в отмеченном и неотмеченном состоянии. По умолчанию они равны 1 и 0 соответственно. Однако мы можем передать им и другие, более удобные для нас значения.

from tkinter import *
from tkinter import ttk
from tkinter.messagebox import showinfo

root = Tk()
root.title("METANIT.COM")
root.geometry("250x200")

def checkbutton_changed():
    showinfo(title="Info", message=enabled.get())

enabled = StringVar()
 
enabled_checkbutton = ttk.Checkbutton(text="Включить", variable=enabled, offvalue="Отключено", onvalue="Включено", command=checkbutton_changed)
enabled_checkbutton.pack(padx=6, pady=6, anchor=NW)

root.mainloop()

Теперь переменная enabled представляет StringVar, то есть хранит строку. Соответственно параметры offvalue и onvalue тоже представляют строку

Текст флажка

Для установки текста флажка можно использовать параметры text и textvariable. Причем мы можем привязать текст флажка к его значению с помощью textvariable:

from tkinter import *
from tkinter import ttk

root = Tk()
root.title("METANIT.COM")
root.geometry("250x200")

enabled_on = "Включено"
enabled_off = "Отключено"
enabled = StringVar(value=enabled_on)
 
enabled_checkbutton = ttk.Checkbutton(textvariable=enabled, variable=enabled, offvalue=enabled_off, onvalue=enabled_on)
enabled_checkbutton.pack(padx=6, pady=6, anchor=NW)

root.mainloop()

В данном случае для хранения текста в отмеченном и неотмеченном состояниях определены две переменные: enabled_on и enabled_off. Переменная enabled инициализируется тем же значением (enabled_on), что и параметр onvalue, поэтому по умолчанию флажок будет отмечен. А поскольку его параметры textvariable и variable привязаны к одной и той же переменной enabled, то они будет изменяться синхронно

привязка текста флажка Checkbutton к его состоянию в tkinter и Python

Обработка нескольких флажков

Аналогичным образом можно использовать наборы флажков:

from tkinter import *
from tkinter import ttk

root = Tk()
root.title("METANIT.COM")
root.geometry("250x200")

def select():
    result = "Выбрано: "
    if python.get() == 1: result = f"{result} Python"
    if javascript.get() == 1: result = f"{result} JavaScript"
    if java.get() == 1: result = f"{result} Java"
    languages.set(result)

position = {"padx":6, "pady":6, "anchor":NW}

languages = StringVar()
languages_label = ttk.Label(textvariable=languages)
languages_label.pack(**position)

python = IntVar()
python_checkbutton = ttk.Checkbutton(text="Python", variable=python, command=select)
python_checkbutton.pack(**position)

javascript = IntVar()
javascript_checkbutton = ttk.Checkbutton(text="JavaScript", variable=javascript, command=select)
javascript_checkbutton.pack(**position)

java = IntVar()
java_checkbutton = ttk.Checkbutton(text="Java", variable=java, command=select)
java_checkbutton.pack(**position)

root.mainloop()

В данном случае языки, которые соответствуют выбранным чекбоксам, будут отображаться на текстовой метке:

checkbox in tkinter and Python
Помощь сайту
Юмани:
410011174743222
Перевод на карту
Номер карты:
4048415020898850