Уведомления

Группа в Telegram: @pythonsu

#1 Янв. 12, 2025 14:32:50

Alex.Pro.
От: Марик
Зарегистрирован: 2024-11-13
Сообщения: 51
Репутация: +  1  -
Профиль   Отправить e-mail  

Checkbutton: неопределённое исходное состояние?

Приветствую всех.
Когда я впервые попытался использовать чекбоксы, у меня получились чекбоксы с третьим, неопределённым исходным состоянием. Сейчас я практически настроил работу с чекбоксами, их обработку.

    
DataEntrBounch = []                            # Список полей ввода
ProptyRow = ['0','','',1]                       # Список индексов и флагов
index = 0                                        # Считаем поля ввода
for col_name, col_nickname in headers.items():      # Для каждого заголовка полей ввода
    if index < 4:
        DataEntrBounch.append(IntVar(master=Add_data_frame, value=ProptyRow[index]))       # Добавляем в список переменную для чекбокса
        ChckBttn = ttk.Checkbutton(Add_data_frame, text=col_nickname, variable=DataEntrBounch[index],
            command= lambda i=index: Fn_PropRowCollect(i,DataEntrBounch[i].get()))     # Создаём чекбокс
        ChckBttn.grid(row=int(index/2),column=(index % 2),sticky='w')   # Размещаем чекбокс во фрейме
        index += 1                                  # Переходим к следующему полю
Всё хорошо, но… Хочу чтобы исходное состояние чекбоксов было неопределённым, но не могу этого добиться. В зависимости от значения привязанной к чекбоксу переменной, чекбокс получается либо взведённым, либо сброшенным. Неопределённое состояние получается если не привязывать переменную к чекбоксу. Но тогда, как прочитать состояние чекбокса?
Кто-нибудь знает, как получить чекбокс с неопределённым исходным состоянием, а потом прочитать его состояние?

Отредактировано Alex.Pro. (Янв. 12, 2025 14:35:38)

Офлайн

#2 Янв. 12, 2025 18:30:41

Alex.Pro.
От: Марик
Зарегистрирован: 2024-11-13
Сообщения: 51
Репутация: +  1  -
Профиль   Отправить e-mail  

Checkbutton: неопределённое исходное состояние?

Прошу у всех прощения за беспокойство, но мне наконец-то удалось решить вопрос.
1) Для начала создаём не инициализированные чекбоксы. Команда для мгновенного реагирования на изменение состояния чекбокса мне не нужна. При этом ни IntVar, ни StringVar создавать нет необходимости.

    
DataEntrBounch = []                                 # Список полей ввода
index = 0                                           # Считаем поля ввода
for col_name, col_nickname in headers.items():      # Для каждого заголовка полей ввода
    if index < 4:
        ChckBttn = ttk.Checkbutton(Add_data_frame, text=col_nickname)   # Создаём чекбокс
        ChckBttn.grid(row=int(index/2),column=(index % 2),sticky='w')   # Размещаем чекбокс во фрейме
        DataEntrBounch.append(ChckBttn)             # Добавляем чекбокс в список
        index += 1                                  # Переходим к следующему полю
2) Получили чекбоксы в третьем состоянии. После выставления чекбоксов в нужное положение, пользователь кликает кнопку и вызывает обработчик полей ввода, который проверяет состояние чекбоксов следующим манером:
    
for i in range(4):
if 'alternate' in DataEntrBounch[i].state():
    print('Не определено!')
    #return
elif 'selected' in DataEntrBounch[i].state():
    print('Выбрано')
else:
    print('Не выбрано')
Оказывается, не так уж сложно.
Да, если кого-то интересует почему в коде присутствует цифра “4”… Только потому, что у меня 4 чекбокса…

Офлайн

Board footer

Модераторировать

Powered by DjangoBB

Lo-Fi Version