为变量创建强大的实时监控器

Sza*_*lcs 7 wolfram-mathematica dynamic mathematica-frontend

我们可以为这样的变量创建一个实时监视器:

CreatePalette@Panel@Row[{"x = ", Dynamic[x]}]
Run Code Online (Sandbox Code Playgroud)

(如果x恰好是类似的话,这会更有趣和有用$Assumptions.设置一个值然后忘记它就很容易了.)

不幸的是,如果重新启动内核(Quit[]然后评估一些内容),这将停止工作.调色板不会再显示值的变化x.

有没有办法做到这一点,所以它在内核会话中保持工作?我发现自己经常重启内核.(如果生成的调色板导致内核在完成后自动启动Quit.)


更新: 如评论中所述,事实证明,只有在我们通过评估退出时,调色板才会停止工作Quit[].使用时Evaluation -> Quit Kernel -> Local,它会继续工作.


hal*_*tan 3

我只能猜测,因为在我的 Ubuntu 上,情况似乎有问题。像列昂尼德建议的那样从菜单中退出的技巧在这里不起作用。另一种是:在仅打开一个笔记本的新 Mathematica 会话中:

Dynamic[x]
x = 1
Dynamic[x]
x = 2
Run Code Online (Sandbox Code Playgroud)

按预期给出

2
1
2
2
Run Code Online (Sandbox Code Playgroud)

输入下一行Quit,评估并输入,然后x=3仅更新 Dynamic[x] 的第一行。

不过,你检查过命令吗

Internal`GetTrackedSymbols[]
Run Code Online (Sandbox Code Playgroud)

这不仅提供了跟踪的符号,还提供了动态内容所属的某种 ID。如果您可以找出这些数字到底是什么,并在内部上下文中找到的其他函数中进行调查,则可以在重新启动内核后手动添加调色板动态内容。

我以为我有类似的东西

Internal`SetValueTrackExtra 
Run Code Online (Sandbox Code Playgroud)

但我目前无法重现该行为。