Саморазрушительная кнопка внутри колонны

Как создать 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 @@ {}]]}]

Но с этим кодом Button не исчезает после нажатия на нее. Можно ли сделать это саморазрушительным?


Окончательное решение, основанное на идеях Dr. 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]]

Ключевые моменты:

  • представляя дополнительные Dynamic переменная b и связать его со значением Options[$FrontEnd, "VersionedPreferences"],
  • оборачивая весь Column построить с Dynamic Вместо того, чтобы использоватьDynamic внутри Column,

2 ответа

Решение

Возможно

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[ ] с 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 @@ {}]}]]

Хм, не знаю, если я правильно понял, но, может быть, это:

х = правда;

Динамический [Столбец [{Button["reset", x = True], If[x, Button["Press me", x = False]]}] ]

Другие вопросы по тегам