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:
  1. class AppCCD:
  2.     def __init__(self):
  3.  
  4.  
  5.     # VENTANA PRINCIPAL
  6.  
  7.     self.root = tk.Tk()
  8.     self.root.title("PRUEBAS")
  9.     self.root.geometry('400x400')
  10.  
  11.  
  12.     # FUNCIONES
  13.  
  14.     def imp(event):
  15.     self.comb2.set(self.comb1.get())
  16.  
  17.     lista = ['JUAN', 'PEDRO', 'LUIS', 'ALBERTO', 'JOAQUÍN']
  18.  
  19.  
  20.     # CAJAS
  21.  
  22.     self.caj1 = ttk.Frame(self.root)
  23.     self.caj1.grid(row=0, column=0)
  24.  
  25.     self.caj2 = ttk.Frame(self.root)
  26.     self.caj2.grid(row=0, column=1)
  27.  
  28.     # ETIQUETAS
  29.  
  30.     self.et1 = ttk.Label(self.caj1, text='Provincia')
  31.     self.et1.grid(row=0, column=0)
  32.  
  33.     self.et2 = ttk.Label(self.caj1, text='Municipio')
  34.     self.et2.grid(row=0, column=1)
  35.  
  36.     # COMBOBOXES
  37.  
  38.     self.comb1 = ttk.Combobox(self.caj1, postcommand=imp)
  39.     self.comb1.grid(row=1, column=0)
  40.     self.comb1.bind('<<ComboboxSelected>>', imp)
  41.     self.comb1['values'] = lista
  42.  
  43.     self.comb2 = ttk. Combobox(self.caj1)
  44.     self.comb2.grid(row=1, column=1)
  45.  
  46.  
  47.  
  48.     self.root.mainloop()
  49.  
  50. def main():
  51. my_app = AppCCD()
  52.  
  53. if __name__ == '__main__':
  54. 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:

  1. def imp(event=None):
  2. # ...


Saludos!
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:

  1. def imp(event=None):
  2.     # ...


Saludos!

Como siempre impecable Francisco. Muchas Gracias.
Responder


Salto de foro:


Usuarios navegando en este tema: 1 invitado(s)