[plt-scheme] Re: Text-contents to a function variable

From: Avi (n4alpaca at gmail.com)
Date: Fri Jan 15 13:21:44 EST 2010

Can you explain how to make this run? I have not seen this in plt
scheme before and it seems very useful.
(define message
  (new message%
       [parent frame]
       [stretchable-width #t]
       [label error-message]))

On Jan 13, 3:46 pm, Carl Eastlund <carl.eastl... at gmail.com> wrote:
> On Wed, Jan 13, 2010 at 3:21 PM, Avi <n4alp... at gmail.com> wrote:
> > Stephen, you are right about the defining H as a scheme variable to
> > have the value of 1.
> > I'm going to answer as clearly as I can so that there is no confusion.
> > If anything that is not one of the scheme variables that was defined
> > before hand a message will pop up explaining the exact way (for
> > simplicity's sake) to use the text-field. (Do you think a giant
> > conditional is the way to go?)
> > I do not believe that the variables will clash because the value that
> > we get from the scheme variables will be used for a program that
> > checks certain combinations. Any instance where the entered value is
> > not the same, would bring up the error message explaining to check
> > what you wrote. Would you like to see what I have for my overall code
> > so far so you can better understand my problem?
> Avi,
> Here is some sample code that will accept inputs to a text field from
> a fixed list, and print out a corresponding number.  (If you want to
> use that number to compute, instead of print, you certainly can, but
> this is a simple example.)  For any other input, it prints an error
> message.  (Once again, if you want this in a popup window instead of
> the main window, you can certainly do that in your program.)  I hope
> this is illustrative of how to use a hash table to map from inputs to
> outputs, without relying on variable names.  Of course you are welcome
> to use variables of the same name, but it is probably best not to rely
> on the variable names themselves for runtime computation.
> #lang scheme/gui
> ;; What to do when the user enters a new string:
> (define (text-callback t e)
>   ;; Wait for the user to press enter
>   (when (eq? (send e get-event-type) 'text-field-enter)
>     ;; Get the value they entered
>     (let ([value (send text get-value)])
>       ;; Compute the new message to display
>       (send message
>             set-label
>             ;; Check for a legal value
>             (if (hash-has-key? table value)
>                 ;; If the value is legal, print out its number.
>                 (format "~a" (hash-ref table value))
>                 ;; Otherwise, print an error message.
>                 error-message)))))
> ;; Things the user can type:
> (define legal-inputs
>   '("cat" "dog" "bird" "mouse"))
> ;; Corresponding numbers:
> (define legal-outputs
>   '(10 20 30 40))
> ;; Build a table mapping inputs to outputs:
> (define table
>   (for/hash ([input (in-list legal-inputs)]
>              [output (in-list legal-outputs)])
>     (values input output)))
> ;; Construct a helpful error message:
> (define error-message
>   (format "Enter one of: ~a" legal-inputs))
> ;; Now create a window with input and output fields.
> (define frame
>   (new frame%
>        [label "The Window"]))
> (define text
>   (new text-field%
>        [parent frame]
>        [label "Input:"]
>        [callback text-callback]))
> (define message
>   (new message%
>        [parent frame]
>        [stretchable-width #t]
>        [label error-message]))
> ;; And finally, open the window!
> (send frame show #t)
> _________________________________________________
>   For list-related administrative tasks:
>  http://list.cs.brown.edu/mailman/listinfo/plt-scheme

Posted on the users mailing list.