[plt-scheme] Re: Text-contents to a function variable
That is a message box; you can find more details by searching for
"message%" in the online documentation:
http://docs.plt-scheme.org/search/index.html?q=message%25
Carl Eastlund
On Fri, Jan 15, 2010 at 1:21 PM, Avi <n4alpaca at gmail.com> wrote:
> 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)