3

Buttonあるグローバルフロントエンド設定の値がであり、この値を設定して押しFalseた後、行全体で自己破壊する場合にのみ表示されるを作成するにはどうすればよいですか?ColumnTrue

私はこのようなものが必要です:

Column[{"Item 1", "Item 2", 
  Dynamic[If[
    Last@Last@Options[$FrontEnd, "VersionedPreferences"] === False, 
    Button["Press me!", 
     SetOptions[$FrontEnd, "VersionedPreferences" -> True]], 
    Sequence @@ {}]]}]

しかし、このコードでは、Buttonそれを押しても消えることはありません。自己破壊的にすることは可能ですか?


belisariusmikuszefskiによるアイデアに基づく最終的な解決策:

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]]

重要なポイントは次のとおりです。

  • Dynamic追加の変数を導入bし、それをの値でバインドしますOptions[$FrontEnd, "VersionedPreferences"]
  • 内部を使用する代わりに、 Column構成全体をでラップします。DynamicDynamicColumn
4

2 に答える 2

6

多分

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"]]}]

編集

あなたのコメントに答える。以下をお試しください。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 @@ {}]}]]
于 2011-06-17T15:01:58.053 に答える
4

うーん、私がそれを正しく理解したかどうかはわかりませんが、多分これ:

x = True;

Dynamic [Column [{Button ["reset"、x = True]、If [x、Button ["Press me"、x = False]]}]]

于 2011-06-17T14:53:18.773 に答える