Calificación:
  • 0 voto(s) - 0 Media
  • 1
  • 2
  • 3
  • 4
  • 5
Error con el evento <<ComboboxSelected>>
#1
Buenas:

Pues como dice el título del tema estoy realizando pruebas con el evento <<ComboboxSelected>> y en principio aunque el código funciona y hace exactamente lo que quiero  que haga, en la consola aparece un error.

Os remito el código:
Código:
class AppCCD:
    def __init__(self):


    # VENTANA PRINCIPAL

    self.root = tk.Tk()
    self.root.title("PRUEBAS")
    self.root.geometry('400x400')


    # FUNCIONES

    def imp(event):
    self.comb2.set(self.comb1.get())

    lista = ['JUAN', 'PEDRO', 'LUIS', 'ALBERTO', 'JOAQUÍN']


    # CAJAS

    self.caj1 = ttk.Frame(self.root)
    self.caj1.grid(row=0, column=0)

    self.caj2 = ttk.Frame(self.root)
    self.caj2.grid(row=0, column=1)

    # ETIQUETAS

    self.et1 = ttk.Label(self.caj1, text='Provincia')
    self.et1.grid(row=0, column=0)

    self.et2 = ttk.Label(self.caj1, text='Municipio')
    self.et2.grid(row=0, column=1)

    # COMBOBOXES

    self.comb1 = ttk.Combobox(self.caj1, postcommand=imp)
    self.comb1.grid(row=1, column=0)
    self.comb1.bind('<<ComboboxSelected>>', imp)
    self.comb1['values'] = lista

    self.comb2 = ttk. Combobox(self.caj1)
    self.comb2.grid(row=1, column=1)



    self.root.mainloop()

def main():
my_app = AppCCD()

if __name__ == '__main__':
main()

Y aquí os pego el error. (Ya os digo que funcionar, funciona correctamente). He intentado con un try y su correspondiente excepción pero el error sigue apareciendo.

Exception in Tkinter callback
Traceback (most recent call last):
  File "/usr/lib/python3.7/tkinter/__init__.py", line 1705, in __call__
    return self.func(*args)
TypeError: imp() missing 1 required positional argument: 'event'

Muchas Gracias.
Responder
#2
Hola.

El problema es que estás asociando dos eventos con argumentos diferentes a la misma función. Cuando el usuario abra el combobox, Tk va a invocar tu función imp() sin argumentos (esto es lo que hace postcommand), cosa que arroja el error que estás viendo porque, según tu definición, imp() requiere un argumento. La solución es usar una función diferente para postcommand, o bien hacer el argumento opcional:

Código:
def imp(event=None):
    # ...

Saludos!
¡No te pierdas nuestro curso oficial en Udemy para aprender Python, bases de datos SQL, orientación a objetos, tkinter y mucho más!

También ofrecemos consultoría profesional de desarrollo en Python para personas y empresas.
Responder
#3
(01-03-2020, 01:49 AM)Francisco escribió: Hola.

El problema es que estás asociando dos eventos con argumentos diferentes a la misma función. Cuando el usuario abra el combobox, Tk va a invocar tu función imp() sin argumentos (esto es lo que hace postcommand), cosa que arroja el error que estás viendo porque, según tu definición, imp() requiere un argumento. La solución es usar una función diferente para postcommand, o bien hacer el argumento opcional:

Código:
def imp(event=None):
    # ...

Saludos!

Como siempre impecable Francisco. Muchas Gracias.
Responder


Salto de foro:


Usuarios navegando en este tema: 1 invitado(s)