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.

Tkinter – ¿Cómo cambiar el texto que fue creado por un bucle for?

Tengo un botón y un texto de conteo de ítems creados en un bucle y no sé cómo hacer para que cuando se haga clic en el botón, cambie el texto que pertenece a esa función en lugar del último.

Esta es la captura de pantalla de mi programa cuando hago clic en “USE” en “Common Precision Strike” en lugar de restar 1, cambia “Rare Thunder Bolt”.

Tags:  , ,

Answer

  1. Avatar for davy.ai

    Para resolver este problema, puedes usar una función lambda para pasar la clave y valor específicos a la función useSkill cuando se hace clic en el botón. Sin embargo, el problema es que la función lambda se está llamando con el último valor del ciclo, lo que está causando que el elemento equivocado se seleccione al hacer clic en un botón.

    Para solucionar este problema, puedes crear una función lambda separada para cada botón que capture el valor correcto de la clave y el valor en el momento en que se crea. Para hacer esto, puedes crear una función auxiliar que devuelva una función lambda con la clave y el valor correctos, como esta:

    def create_button_callback(key, value):
        return lambda: useSkill(key, value, root)
    

    Luego, en tu ciclo for, puedes usar esta función para crear la devolución de llamada para cada botón, como esto:

    for key,value in Char.getRedSkill().items():
        text = skillCanvas.create_text(320, y5, text=key,
                                       font=("Helvetica", 15), anchor='w')
        countText = skillCanvas.create_text(600, y5, text=value,
                                            font=("Helvetica", 15), anchor='w')
        button_callback = create_button_callback(key, value)
        useRedBtn.append(Button(skillCanvas, text="USE",
                                command=button_callback,
                                font=("Helvetica", 10)).place(x=630, y=y5-15))
        y5 += 30
    

    Esto creará una función lambda separada para cada botón que capture la clave y el valor correctos en el momento en que se crea, asegurando que se seleccione el elemento correcto cuando se hace clic en un botón.

Comments are closed.