¿Cuáles son los argumentos para las devoluciones de llamada del método de seguimiento de variables de Tkinter?

Resuelto Marshall Davis asked hace 9 años • 2 respuestas

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 callbackfunció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 xparece 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.

Marshall Davis avatar Apr 17 '15 11:04 Marshall Davis
Aceptado

El primer argumento es el nombre de la variable interna. Puede utilizar este nombre como argumento para tkinter getvary setvarsus 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.

Bryan Oakley avatar Apr 17 '2015 10:04 Bryan Oakley

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.

Keith Caulfield avatar Dec 15 '2017 19:12 Keith Caulfield