¿Cuáles son los argumentos para las devoluciones de llamada del método de seguimiento de variables de Tkinter?
Python tiene clases para variables de Tkinter StringVar()
, BooleanVar()
etc. Todas ellas comparten los métodos get()
, set(string)
y trace(mode, callback)
. A la callback
función pasada como segundo argumento se le trace(mode, callback)
pasan cuatro argumentos, self, n, m, x
.
Por ejemplo, BooleanVar()
estos parecen ser '', 'PYVAR0', 'w'
.
El tercer argumento x
parece ser el modo que desencadenó el seguimiento; en mi caso se cambió la variable. Sin embargo, ¿cuál es la primera variable que parece ser una cadena vacía? ¿Cuál es el segundo? Si tuviera que adivinar, diría algún nombre interno para la variable.
El primer argumento es el nombre de la variable interna. Puede utilizar este nombre como argumento para tkinter getvar
y setvar
sus métodos. Si le da un nombre a su variable (por ejemplo:), StringVar(name='foo')
este será el nombre de pila; de lo contrario, será un nombre generado para usted por tkinter (por ejemplo PYVAR0
:)
Si el primer argumento representa una variable de lista (muy poco probable en tkinter), el segundo argumento será un índice de esa lista. Si es una variable escalar, el segundo argumento será la cadena vacía.
El tercer argumento es la operación, útil si está utilizando el mismo método para leer, escribir y/o eliminar la variable. Este argumento le indica qué operación desencadenó la devolución de llamada. Será uno de "leer", "escribir" o "desarmar".
Tkinter es un contenedor de Python alrededor de un intérprete tcl/tk. La documentación definitiva para seguimientos de variables se puede encontrar aquí: http://tcl.tk/man/tcl8.5/TclCmd/trace.htm#M14 . Sin embargo, esto solo documenta cómo funciona el seguimiento interno, el contenedor tkinter a veces manipula los datos.
El primer argumento es el nombre de la variable, pero no es "inútil" ya que puedes configurarlo cuando declaras la variable, por ejemplo:
someVar = IntVar(name="Name of someVar")
Cuando verifique el primer argumento en la devolución de llamada de seguimiento, será igual a "Nombre de algunaVar". Usando el nombre para distinguir entre variables, puede vincular el mismo controlador para rastrear cambios en cualquier número de variables, en lugar de necesitar un controlador separado para cada variable.