Racket/Lille-GUI
Från Täpp-Anders
Hoppa till navigeringHoppa till sök
#lang racket/gui
;;;;;
;; Riktigt Enkelt GUI-Demo implementerad i Racket
;; Täpp-Anders Sikvall 2026-04-03 anders@sikvall.se
;;;;;
;; Skapa huvudfönstret
(define frame
(new frame%
[label "Racket GUI Demo"]
[width 520]
[height 420]))
;; Meny
(define menu-bar (new menu-bar% [parent frame]))
(define menu-file (new menu% [label "Arkiv"] [parent menu-bar]))
(new menu-item% [label "Öppna..."] [parent menu-file]
[callback (λ (i e) (message-box "Öppna" "Filöppning simulerad"))])
(new menu-item% [label "Spara"] [parent menu-file]
[callback (λ (i e) (message-box "Spara" "Filen sparad!"))])
(new separator-menu-item% [parent menu-file])
(new menu-item% [label "Avsluta"] [parent menu-file]
[callback (λ (i e) (send frame show #f))])
(define menu-help (new menu% [label "Hjälp"] [parent menu-bar]))
(new menu-item% [label "Om programmet"] [parent menu-help]
[callback (λ (i e) (message-box "Om" "Racket GUI Demo\nPedagogisk exempel"))])
;; Lite layouting av dialogen
(define main-panel
(new vertical-panel% [parent frame] [spacing 12] [border 15]))
;; Rubrik
(new message%
[parent main-panel]
[label "Välkommen till Racket GUI-demo!"])
;; Input-fält, 2 st, namn och epost
(define name-field
(new text-field% [parent main-panel] [label "Namn:"] [init-value "Anna Andersson"]))
(define email-field
(new text-field% [parent main-panel] [label "E-post:"] [init-value "anna@example.com"]))
;; Radio buttons för att välja färg
(define color-group
(new group-box-panel% [parent main-panel] [label "Favoritfärg"]))
(define color-radio
(new radio-box% [parent color-group] [label #f]
[choices '("Röd" "Grön" "Blå" "Gul")]
[style '(vertical)]))
;; Knappar för rensa och skicka
(define btn-panel
(new horizontal-panel% [parent main-panel] [alignment '(center center)] [spacing 20]))
(new button% [parent btn-panel] [label "Rensa"]
[callback (λ (b e)
(send name-field set-value "")
(send email-field set-value "")
(send color-radio set-selection 0))])
(new button% [parent btn-panel] [label "Skicka"] [style '(border)]
[callback (λ (b e)
(define name (send name-field get-value))
(define email (send email-field get-value))
(define color (list-ref '("Röd" "Grön" "Blå" "Gul")
(send color-radio get-selection)))
(message-box "Tack!"
(format "Hej ~a!\n\nE-post: ~a\nFavoritfärg: ~a"
name email color)))])
;; Centrera fönstret och starta GUI
(send frame center)
(send frame show #t)