Partes [] de la salida de DynamicModule
Di una respuesta parcial a una pregunta: ¿Se pueden generar controles de manipulación mediante programación en función de una variable (no manipulada)? , lo que me ha llevado a mis propias preguntas.
Fondo:
El siguiente código produce un par de Sliders idénticos , donde el establecimiento de un valor de 1 aparece en el otro.
{Slider[Dynamic[d], {0, 1, 0.01}],
Dynamic[d],
Dynamic[Plot[Sin[1 + d x], {x, -10 \[Pi], 10 \[Pi]}]]
} & /@ Range[2]
p.ej,
Envolver el código en a DynamicModulele brinda algo diferente, la capacidad de configurar los Sliders de forma independiente (una cosa posiblemente útil):
dm = DynamicModule[{d},
{Slider[Dynamic[d], {0, 1, 0.01}],
Dynamic[d],
Dynamic[Plot[Sin[1 + d x], {x, -10 \[Pi], 10 \[Pi]}]]
}] & /@ Range[2]
{"Length", Length[dm]}
{"Dimensions", Dimensions[dm]}
TreeForm[dm]
He añadido el Length, Dimensionsy TreeFormpara comprender mejor lo que el código produce realmente.
Exploremos esto un poco más:
dm[[1]]
Length[%]
Tenga en cuenta que configuré el Slideren 0.69después de ejecutar el código.
Y ahora trato de extraer el Partsde la expresión:
dm[[1, 1]]
dm[[1, 2]]
dm[[1, 3]]
Esto parece un poco extraño. Hubiera esperado que obtuviera los 3 Parts dm[[1]]en orden, por ejemplo:
Slider
Value
Plot
Entonces, algunas preguntas:
¿Alguien puede explicar esto? Los
Parts dedm[[1]]no parecen comportarse como cabría esperar.¿Existe alguna forma de acceder al estado actual de los 2
Plots endmy, por ejemplo, aShowellos juntos?¿
TreeFormNos da alguna idea de cómo acceder aParttales expresiones?
Me doy cuenta de que estas preguntas pueden parecerse a algo parecido a problemas arcanos de ajedrez , sin mucha aplicación en el mundo real, pero espero que las respuestas puedan dar una idea de trabajo adicional sobre estas estructuras.
Respuestas
1- DynamicModuleno desaparece como Module. Después de la evaluación inicial del contenido, permanece inerte y se usará cuando se envíe como salida para producir DynamicModuleBox que gobierna el alcance dentro de su interfaz gráfica de usuario.
dm[[1]] // InputForm
DynamicModule[
{d},
{Slider[Dynamic[d], {0, 1, 0.01}], Dynamic[d], Dynamic[Plot[Sin[1 + d*x], {x, -10*Pi, 10*Pi}]]},
DynamicModuleValues :> {}
]
Esto es dm[[1]]y tiene dos argumentos y una opción, lo que significa que obtendrá longitud 3.
2- dmes solo una expresión como cualquier otra, Table[dm, {10}]contiene 10 copias independientes de la misma. Cada GUI generada será independiente. Si desea acceder a los valores desde el interior con mayor frecuencia, deberá hacerlo desde el interior, por ejemplo:
DynamicModule[{x}, Slider @ Dynamic[x, (notScopedX = x = # )&]
Ahora puedes usarlo Dynamic @ notScopedXen otro lugar.
3- Claro que sí, como InputFormpor ejemplo. Su forma de árbol dice que puede acceder al primer control deslizante con dm[[1, 2, 1]]. Pero esta es una copia de lo que se usó para generar GUI antes / después.
Avísame si algo no está claro.