Ale*_*kov 3 wolfram-mathematica mathematica-frontend
如何创建一个Button只有当某个全局FrontEnd设置的值是,False并且Column在按下它后将整个行自我毁坏并将其设置为True?
我需要这样的东西:
Column[{"Item 1", "Item 2",
Dynamic[If[
Last@Last@Options[$FrontEnd, "VersionedPreferences"] === False,
Button["Press me!",
SetOptions[$FrontEnd, "VersionedPreferences" -> True]],
Sequence @@ {}]]}]
Run Code Online (Sandbox Code Playgroud)
但是使用此代码Button后,按下它后不会消失.是否有可能使其具有自我毁灭性?
基于belisarius和mikuszefski的想法的最终解决方案:
PreemptProtect[SetOptions[$FrontEnd, "VersionedPreferences" -> False];
b = True];
Dynamic[Column[
Join[{"Item 1", "Item 2"},
If[Last@Last@Options[$FrontEnd, "VersionedPreferences"] === False &&
b == True, {Button[
Pane[Style[
"This FrontEnd uses shared preferences file. Press this \
button to set FrontEnd to use versioned preferences file (all the \
FrontEnd settings will be reset to defaults).", Red], 300],
AbortProtect[
SetOptions[$FrontEnd, "VersionedPreferences" -> True];
b = False]]}, {}]], Alignment -> Center],
Initialization :>
If[! Last@Last@Options[$FrontEnd, "VersionedPreferences"], b = True,
b = False]]
Run Code Online (Sandbox Code Playgroud)
关键点是:
Dynamic变量b并将其与值绑定Options[$FrontEnd, "VersionedPreferences"],Column构造包裹Dynamic而不是在Dynamic里面使用
Column.也许
PreemptProtect[SetOptions[$FrontEnd, "VersionedPreferences" -> False]; b = True];
Column[{"Item 1", "Item 2", Dynamic[
If[Last@Last@Options[$FrontEnd, "VersionedPreferences"]===False && b == True,
Button["Here!", SetOptions[$FrontEnd, "VersionedPreferences"->True];b=False],
"Done"]]}]
Run Code Online (Sandbox Code Playgroud)
编辑
回答你的评论.请尝试以下方法.包含Column[ ]with Dynamic[ ]允许调整大小:
PreemptProtect[SetOptions[$FrontEnd, "VersionedPreferences" -> False]; b = True];
Dynamic[
Column[{
"Item 1",
"Item 2",
If[Last@Last@Options[$FrontEnd, "VersionedPreferences"] === False && b == True,
Button["Press me!", SetOptions[$FrontEnd, "VersionedPreferences" -> True]; b=False],
Sequence @@ {}]}]]
Run Code Online (Sandbox Code Playgroud)