On this page:
create-window
window?
show-window
hide-window
make-button
make-message
draw-message
make-text
text-contents
make-choice
choice-index

1.12 Simple Graphical User Interfaces: "gui.ss"

The teachpack provides operations for creating and manipulating graphical user interfaces. We recommend using the world teachpack instead.

Window A Window is a data representation of a visible window on your computer screen.

GUI-ITEM A GUI-Item is a data representation of an active component of a window on your computer screen.

(create-window g)  Window
  g : (listof (listof GUI-ITEM))
Creates a window from the “matrix” of gui items g.

(window? x)  boolean?
  x : any/c
Is the given value a window?

(show-window w)  true
  w : Window
Shows w.

(hide-window w)  true
  w : window
Hides w.

(make-button label callback)  GUI-ITEM
  label : string>
  callback : (-> event%  boolean)
Creates a button with label and callback function. The latter receives an argument that it may safely ignore.

(make-message msg)  GUI-ITEM
  msg : string?
Creates a message item from msg.

(draw-message g m)  true
  g : GUI-ITEM
  m : string?
Displays m in message item g and erases the current message.

(make-text txt)  GUI-ITEM
  txt : string?
Creates an text editor (with label txt) that allows users to enter text.

(text-contents g)  string?
  g : GUI-ITEM
Determines the current contents of a text GUI-ITEM.

(make-choice choices)  GUI-ITEM
  choices : (listof string?)
Creates a choice menu from choices that permits users to choose from some alternatives.

Determines the choice that is currently selected in a choice GUI-ITEM; the result is the 0-based index in the choice menu

Example 1:
> (define w
    (create-window
      (list (list (make-button "QUIT" (lambda (e) (hide-window w)))))))
; A button appears on the screen.
; Click on the button and it will disappear.
> (show-window w)
; The window disappears.

Example 2:
; text1 : GUI-ITEM
(define text1
  (make-text "Please enter your name"))
 
; msg1 : GUI-ITEM
(define msg1
  (make-message (string-append "Hello, World" (make-string 33 #\space))))
 
; Event -> true
; draws the current contents of text1 into msg1, prepended with "Hello, "
(define (respond e)
  (draw-message msg1 (string-append "Hello, " (text-contents text1))))
 
; set up window with three "lines":
;    a text field, a message, and two buttons
; fill in text and click OKAY
(define w
 (create-window
  (list
   (list text1)
   (list msg1)
   (list (make-button "OKAY" respond)
         (make-button "QUIT" (lambda (e) (hide-window w)))))))