2017-09-14 2 views
1

J'utilise le code suivant pour un petit programme GUI:GUI mise en page des composants Racket/schéma

#lang racket/gui 

(define ff (new frame% 
       [label "Adjust widths"] 
       [height 100] 
       [width 300])) 
(new message% [parent ff][label "testing"]) 
(new text-field% [parent ff][label "tf1"]) 
(new text-field% [parent ff][label "tf2- a long prompt"]) 
(new text-field% [parent ff][label "tf3    "]) 
(new text-field% [parent ff][label "tf4    "]) 
(send ff show #t) 

Cependant, je ne suis pas en mesure d'obtenir souhaité la mise en page: enter image description here

Comment puis-je obtenir au-dessus disposition. Je vois text-field et d'autres composants ont min-width et extensible-width. Lequel si ceux-ci est défaut et qui est réel n'est pas clair pour moi. Comment puis-je corriger la largeur de text-field? Devrais-je utiliser le package table-panel pour cela? Merci de votre aide.

Edit: J'ai vérifié https://docs.racket-lang.org/gui/windowing-overview.html?q=gui et aussi essayé différentes options telles que [min-width 50] et [stretchable width #f] mais apparemment il est impossible de fixer la taille du texte champ à une valeur particulière.

Répondre

1

Une possibilité consiste à définir d'abord les étiquettes à celle de la largeur maximale, puis à les remplacer par l'étiquette désirée. Cela fonctionne pour moi au moins.

#lang racket/gui 

(define ff (new frame% 
       [label "Adjust widths"] 
       [height 100] 
       [width 300])) 
(new message% [parent ff][label "testing"]) 
(define strings 
    '("tf1" "tf2- a long prompt" "tf3" "tf4")) 
(define str-max (argmax string-length strings)) 
(define txt-fields 
    (for/list ([str (in-list strings)]) 
    (new text-field% [parent ff] [label str-max]))) 

(for ([tf (in-list txt-fields)] 
     [str (in-list strings)]) 
    (send tf set-label str)) 

(send ff show #t) 

enter image description here

Puisque les polices ne peuvent pas avoir une largeur fixe, vous pouvez utiliser underscores pour la chaîne de longueur maximale. Une autre possibilité est de se débarrasser complètement de l'étiquette du champ de texte en passant #f comme argument et de créer le vôtre en utilisant un message% pour lequel vous pouvez réellement contrôler la largeur avec min-width. Vous devrez peut-être mettre le message et le champ de texte dans un horizontal-panel%.

+0

Bonne 2 méthodes pour résoudre le problème. – rnso