为什么不从自定义Palette更新局部变量颜色运行ClearAll ["Global`*"]?

P. *_*eca 4 wolfram-mathematica mathematica-frontend

我创建了一个自定义调色板,并ActionMenu执行ClearAll["Global`*"].它执行所需的操作,但前端不会立即将颜色从黑色更新为蓝色(标准),因为它ClearAll["Global`*"]直接从笔记本单元格执行时发生(它仅在执行其他操作后更新).有没有办法启动刷新前端显示状态?

编辑:显然,当我从调色板加载包时(蓝色不会立即更新为黑色)也会发生同样的情况.

Rol*_*tig 6

不完全优雅,但它的工作原理(主循环必须在ClearAll之后调用一次):

ActionMenu["Clear", 
   {"Clear global variables" :> (ClearAll["Global`*"]; 
         Block[{nb}, nb = CreateDocument[ExpressionCell[42, "Input"], 
                Visible -> False]; SelectionMove[nb, All, Notebook]; 
            SelectionEvaluate[nb]; NotebookDelete[nb];])}]
Run Code Online (Sandbox Code Playgroud)

当然,应该使用新的Mathematica 8 NotebookEvaluate函数,但它似乎不适用于此(即,

ActionMenu["Clear", 
   {"Clear global variables" :> (ClearAll["Global`*"]; 
         Block[{nb}, nb = CreateDocument[ExpressionCell[42, "Input"], 
                Visible -> False]; NotebookEvaluate[nb]; 
     NotebookDelete[nb];])}]
Run Code Online (Sandbox Code Playgroud)

给出错误信息

Could not process unknown packet "1".
Run Code Online (Sandbox Code Playgroud)