Foros Python

Versión completa: Error con el evento <<ComboboxSelected>>
Actualmente estas viendo una versión simplificada de nuestro contenido. Ver la versión completa con el formato correcto.
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.
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!
(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.