Саморазрушительная кнопка внутри колонны
Как создать 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]]}] ]