Services & Resources / Wolfram Forums
MathGroup Archive
*Archive Index
*Ask about this page
*Print this page
*Give us feedback
*Sign up for the Wolfram Insider

MathGroup Archive 2005

[Date Index] [Thread Index] [Author Index]

Search the Archive

Re: MathLink and GUIKit

  • To: mathgroup at
  • Subject: [mg57509] Re: MathLink and GUIKit
  • From: Maxim <ab_def at>
  • Date: Tue, 31 May 2005 04:59:00 -0400 (EDT)
  • References: <> <d71j58$489$>
  • Sender: owner-wri-mathgroup at

On Wed, 25 May 2005 10:14:00 +0000 (UTC), Jeff Adams <jeffa at>  

> At 04:12 AM 5/24/2005, Goyan wrote:
>> Hi all,
>> I have a written C++ function called HSeg which I can call it after
>> using "Install[]" using Mathlink, however, when I dont seem to be able
>> to call the function within the GUIKit.  My code is as the following:
>> HSegButton = GUIRun[
>>      Widget["Panel", {Widget["
>>         Button", {"text" -> "HSeg", BindEvent["mouseClicked",
>>                 Script[HSeg[img]]]]}]}
>>        ]
>>      ]
>> Can anyone help me with this?
>> Thank you in advance.
>> Goyan
> Hello,
> Each GUIKit definition by default runs within a protected $ContextPath
> which does not include the Global` context.
> When you call Install[] on your function outside the definition above
> the symbol HSeg is most likely in the Global` context.
> You can include the Global` context with the call to GUIRun above
> using the option IncludedScriptContexts -> {"Global`"}
> You can read more about how contexts are handled with GUIKit definitions
> in the Help Browser documentation under
> GUIKit -> Building GUIs -> Advanced Topics -> Scoping of Scripts
> Jeff Adams
> Wolfram Research

I'd just like to mention that, strictly speaking, this is not the whole  
explanation. Normally if we write something like y := x, then x is created  
in the Global` context when this line is parsed by the interpreter, and  
regardless of the setting of $Context or $ContextPath at the moment when  
Global`y is evaluated, it will always return Global`x. Script does  
something different; most likely it applies ToString to its arguments.

The resulting behaviour is rather strange:

(*starting with a fresh kernel*)
x = 1;
   Widget["Button", {"text" -> "Print",

prints x but then

Global`x = 2;
   Widget["Button", {"text" -> "Print",

prints 1. In the first case ToString[Unevaluated@ Print[a`x]] returns  
"Print[x]" (Mathematica omits the context prefix when possible), and  
ToExpression["Print[x]"] is evaluated in a different context (say,  
hidden`), creating and using the new symbol hidden`x, because a` isn't on  
$ContextPath within Script. In the second case ToString[Unevaluated@  
Print[a`x]] returns "Print[a`x]", which doesn't change its meaning inside  
hidden`. So one always has to remember whether Mathematica shortens a`x to  
just x or leaves the name in the fully qualified form a`x.

Another implication is that Script can hide only symbols that explicitly  
appear in the arguments:

(*starting with a fresh kernel*)
x := 1
a`y := x
   Widget["Button", {"text" -> "Print",
       Script[Print[{x, a`y}]]]

This will print {x, 1}.

Maxim Rytin
m.r at

  • Prev by Date: Re: Related quastions. Question 2
  • Next by Date: Re: Re: Re: Folding Deltas
  • Previous by thread: Re: MathLink and GUIKit
  • Next by thread: Sorting nested list