I am trying to make a Package for a piece of code though it's not needed here as it is very small. But my actual code here is a little bit different from that code. When I tried to make a package for Button. I found that the symbol True is protected.

I have made a package with the function Buttonfun

 Buttonfun[g1_,g2_]:= Button["     ",(g1=!g1;),Background->g2,Appearance->          
                     "Frameless",Method-> "Queued"];

but when I call this with


from my notebook, it is showing error message symbol True is protected.

  • $\begingroup$ Is q2 defined? $\endgroup$ – cormullion Aug 2 '12 at 9:26
  • $\begingroup$ @cormullion: yes, I have edited in question. $\endgroup$ – Jennifer Aug 2 '12 at 9:31
  • $\begingroup$ Your code works for me when q2 is defined. $\endgroup$ – cormullion Aug 2 '12 at 9:32
  • $\begingroup$ @cormullion: How are you making functions in package for buttons? $\endgroup$ – Jennifer Aug 2 '12 at 9:33
  • 1
    $\begingroup$ As I understand it now, the first (large) block of code isn't really necessary to understand your problem, nor is it actually a package problem. Only the Buttonfun definition and call are necessary. If you agree, you could cut your question down to these essentials. $\endgroup$ – Sjoerd C. de Vries Aug 2 '12 at 13:42

You need to prevent q1 from being immediately evaluated when you use it in Buttonfun[q1,Orange], otherwise Buttonfun will try to make the assigment True = !True which causes the error. To do this you have to tell Buttonfun to "hold" its first argument, so it can make the assigment to the symbol q1 instead of the value True.

The code to tell Buttonfun to hold its first argument is:


Your Answer

By clicking “Post Your Answer”, you agree to our terms of service, privacy policy and cookie policy

Not the answer you're looking for? Browse other questions tagged or ask your own question.