es.davy.ai

Preguntas y respuestas de programación confiables

¿Tienes una pregunta?

Si tienes alguna pregunta, puedes hacerla a continuación o ingresar lo que estás buscando.

¿Cómo cambiar los estados de las casillas de verificación de Tkinter al crear casillas de verificación con un diccionario?

Estoy haciendo un programa que le da al usuario una selección de casillas de verificación para elegir. Las casillas de verificación se crean automáticamente con un bucle. Puedo detectar cuáles se han marcado, pero no puedo cambiar el estado de casillas específicas por mi cuenta más tarde. Específicamente, quiero eliminar todas las marcas de las casillas de verificación marcadas después de hacer clic en un botón, pero en general, me gustaría saber cómo cambiar el estado de casillas de verificación individuales. Aquí hay un código de ejemplo:

“`
import tkinter
from tkinter import *
tagsValue = {‘Beef’: 0, ‘Fish’: 0, ‘Chicken’: 0, ‘Pork’: 0, ‘Lamb’: 0, ‘Egg’: 0, ‘Ham’: 0}

def execute():
my_text.delete(‘1.0’, END)
for tag in tagsValue:
if tagsValue[tag].get() == ‘1’:
my_text.insert(INSERT, (‘\n’ + tag))

root = Tk()
root.title(‘Selección de usuario’)
root.geometry(“300×300″)
my_button = Button(root, text =”Enviar”,command = execute)
my_text = Text(root)

for tag in list(tagsValue):
tagsValue[tag] = Variable()
l = Checkbutton(root,justify=LEFT,width=8, text=tag, variable=tagsValue[tag])
l.deselect()
l.pack()

my_button.pack()
my_text.pack()
root.mainloop()

He intentado usar cosas como tagsValue[‘Ham’] = ‘0’ y tagsValue[‘Ham’] = 0 antes de root.mainloop(), pero esas no funcionan. Soy consciente de usar [‘state’] para cambiar el estado de las casillas de verificación, pero como mis casillas de verificación no tienen nombres, no puedo usarlo. (No puedo nombrar las casillas de verificación individualmente porque tengo muchas casillas de verificación). Entonces, ¿cómo puedo cambiar el estado de las casillas de verificación?

Tags:  , ,

Answer

  1. Avatar for davy.ai

    Para cambiar el estado de casillas de verificación individuales, puede acceder a la variable correspondiente desde el diccionario tagsValue y establecer su valor en 1 o 0. Por ejemplo, para quitar todas las marcas de las casillas de verificación marcadas, puede agregar el siguiente código a la función execute:

    for tag in tagsValue:
        tagsValue[tag].set(0)
    

    Esto establecerá el valor de cada variable en tagsValue en 0, lo que deseleccionará todas las casillas de verificación.

    Tenga en cuenta que para establecer una variable en 0, no es necesario usar comillas, por lo que debe usar tagsValue['Ham'].set(0) en lugar de tagsValue['Ham'] = '0'.

    En general, su código modificado debería verse así:

    import tkinter
    from tkinter import *
    
    tagsValue = {'Beef': 0, 'Fish': 0, 'Chicken': 0, 'Pork': 0, 'Lamb': 0, 'Egg': 0, 'Ham': 0}
    
    def execute():
        my_text.delete('1.0', END)
        for tag in tagsValue:
            if tagsValue[tag].get() == 1:
                my_text.insert(INSERT, ('\n' + tag))
        for tag in tagsValue:
            tagsValue[tag].set(0) # deselecciona todas las casillas de verificación
    
    root = Tk()
    root.title('Selección de usuario')
    root.geometry("300x300")
    
    my_button = Button(root, text="Enviar", command=execute)
    my_text = Text(root)
    
    for tag in tagsValue:
        tagsValue[tag] = Variable()
        l = Checkbutton(root, justify=LEFT, width=8, text=tag, variable=tagsValue[tag])
        l.deselect()
        l.pack()
    
    my_button.pack()
    my_text.pack()
    
    root.mainloop()
    

    ¡Espero que esto ayude! Avíseme si tiene alguna otra pregunta.

Comments are closed.