AttributeError: у объекта 'Checkbutton' нет атрибута 'deselect' - PullRequest
0 голосов
/ 24 января 2020

У меня проблема с загрузкой состояния флажка из текстового файла, который содержит '0' и '1'.

inside "test.txt" file :

1
0
1
0

Это то, что я ожидаю, что результат будет как ' 1 'обозначает установленный флажок, а' 0 'обозначает не отмеченный флажок

enter image description here

Ниже приведен код, над которым я работаю:

import tkinter as tk
from tkinter import ttk
root = tk.Tk()
root.geometry("180x90")
name1 = ["Mike", "Harry", "Siti", "Jenn"]

def loadstates():
    f = open("test.txt", "r")
    list_a = []
    list_a = f.readlines()
    return list_a
    f.close()

def createCheckboxes():
    for x, y in zip(st, name1):
        check = ttk.Checkbutton(root, text=y, variable=x)
        if x=='0':
            check.select()
        else:
            check.deselect()
        check.pack(anchor=tk.W)

st = loadstates()
createCheckboxes()
root.mainloop()

Но выдает ошибку:

Traceback (последний вызов был последним): файл "C: / Users / jmamuham / PycharmProjects / LogBook / load_state.py", строка 24, в createCheckboxes () Файл "C: / Users / jmamuham / PycharmProjects / LogBook / load_state.py", строка 20, в createCheckboxes check.deselect () AttributeError: у объекта 'Checkbutton' нет атрибута 'deselect'

Есть идеи, почему .select () и .deselect () дают мне эту ошибку?

Кстати, я использую правильный подход для повторного заполнения состояния флажка, используя 1 и 0?

Ответы [ 2 ]

0 голосов
/ 24 января 2020
import tkinter as tk
root = tk.Tk()
root.geometry("180x90")
name1 = ["Mike", "Harry", "Siti", "Jenn"]

def loadstates():
    f = open("test.txt", "r")
    list_a = []
    list_a = f.readlines()
    f.close()
    return list_a

def createCheckboxes():
    for x, y in zip(st, name1):
        check = tk.Checkbutton(root, text=y, variable=x)
        if x.strip()=='0':
            check.select()
        else:
            check.deselect()
        check.pack(anchor=tk.W)

st = loadstates()
createCheckboxes()
root.mainloop()

Использование tk.Checkbutton

Использование x.strip()=='0'

0 голосов
/ 24 января 2020

Есть еще более простой способ, чем select () и deselect ()! Если вы правильно связываете флажок с переменной tkinter int или boolean, эта кнопка автоматически проверяет и снимает флажок, если ей даны значения 1 / True или 0 / False соответственно. Вот как:

import tkinter as tk
from tkinter import ttk
root = tk.Tk()
root.geometry("180x90")
name1 = ["Mike", "Harry", "Siti", "Jenn"]

def loadstates():
    f = open("test.txt", "r")
    list_a = []
    list_a = f.readlines()
    f.close()
    return [int(i) for i in list_a] # Make sure your values are integers, not strings

def createCheckboxes():
    for value, y in zip(st, name1):
        x = tk.IntVar() # This is a tkinter variable. BooleanVar() will also work here
        x.set(value) # When modifying values of a tkinter variable, always use .set()
        check = ttk.Checkbutton(root, text=y, variable=x)
        check.var = x # Link the variable to the checkbutton so it isn't thrown out by garbage collection
        check.pack(anchor=tk.W)

st = loadstates()
createCheckboxes()
root.mainloop()
...