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: En un widget personalizado, ¿cómo puedo establecer el valor de una variable personalizada a través de .configure?

Me gustaría utilizar este commando para establecer mi variable personalizada, ¿cómo hacer esto?

self.ent1.configure(my_custom_var='teste')

Quiero que mi variable personalizada sea parte del diccionario .configure

Código de ejemplo:

from tkinter import *

class My_Entry(Entry):
    def __init__(self, parent, my_custom_var='', *args, **kwargs):

        super().__init__(parent, *args, **kwargs)

        #print('my_custom value: ', my_custom_var)
        print(self['my_custom_var'])

        return

    def configure(self, **kwargs):
        super().configure(**kwargs)
        print(kwargs) #<--- mi variable personalizada aquí en kwargs

#--------------

class Mainframe(Tk):
    def __init__(self):
        Tk.__init__(self)

        #self.ent1 = My_Entry(self, my_custom_var='teste')
        self.ent1 = My_Entry(self)
        self.ent1.configure(show='*')
        #self.ent1.configure(show='*', my_custom_var='teste')
        self.ent1.pack()
        return

if __name__== '__main__':
    app = Mainframe()
    app.mainloop()
Tags:  , ,

Answer

  1. Avatar for davy.ai

    Para establecer la variable personalizada utilizando el comando self.ent1.configure(my_custom_var='teste'), puedes modificar el método configure() de la clase My_Entry para incluir la variable personalizada en el diccionario kwargs.

    Aquí tienes un fragmento de código actualizado que demuestra esto:

    from tkinter import *
    
    class My_Entry(Entry):
        def __init__(self, parent, my_custom_var='', *args, **kwargs):
            super().__init__(parent, *args, **kwargs)
            self.my_custom_var = my_custom_var
            print('valor de my_custom:', my_custom_var)
    
        def configure(self, **kwargs):
            if 'my_custom_var' in kwargs:
                self.my_custom_var = kwargs.pop('my_custom_var')
            super().configure(**kwargs)
            print(kwargs) #<--- mi variable personalizada aquí en kwargs
    
    class Mainframe(Tk):
        def __init__(self):
            Tk.__init__(self)
            self.ent1 = My_Entry(self)
            self.ent1.configure(show='*', my_custom_var='teste')
            self.ent1.pack()
    
    if __name__== '__main__':
        app = Mainframe()
        app.mainloop()
    

    En este código, modificamos el método __init__() de la clase My_Entry para inicializar un atributo my_custom_var para la instancia. Luego modificamos el método configure() para verificar si se proporcionó el argumento de palabra clave my_custom_var y, de ser así, establecer el valor del atributo antes de llamar al método super con los kwargs restantes.

    Ahora, cuando llamamos a self.ent1.configure(my_custom_var='teste'), la variable personalizada se agregará al diccionario kwargs y se pasará al método configure() de la clase My_Entry.

Comments are closed.