2017-10-19 17 views
2

Je suis complètement nouveau à Pharo, Smalltalk. Je développe une petite application qui va convertir la température de Fahrenheit à Celsius. Quelqu'un peut-il me donner une idée sur la façon de créer un champ de saisie en utilisant TextMorph et l'afficher sur une fenêtre comme indiqué dans la capture d'écran. En outre, être capable de récupérer les données du champ de saisie lorsque le bouton est cliqué. Le code ci-dessous est ce que j'ai fait jusqu'à présent. ScreenshotPharo Smalltalk: Comment créer un champ de saisie en utilisant TextMorph, puis extraire les données du champ de saisie?

La classe TemperatureMorph

BorderedMorph subclass: #TemperatureMorph 
     instanceVariableNames: 'tempInputField counter' 
     classVariableNames: '' 
     package: 'Assignment' 

La méthode initialize: Contient une étiquette, et un bouton zone de texte.

initialize 
    | headingLabel converterButton| 
    super initialize. 
    self bounds: ([email protected] corner:[email protected]). 
    self color: Color gray. 

    headingLabel := StringMorph contents: 'Converter'. 
    headingLabel position: [email protected] 
    self addMorph: headingLabel. 

    tempInputField := TextMorph new.  
    tempInputField position: [email protected] 
    self addMorph: tempInputField. 

Merci

+1

Le fait que la solution se trouve juste en face de vous dans la capture d'écran me demande si vous avez essayé quelque chose et vous avez fait des recherches avant de poster cette question. – JayK

+0

@Jayk Oui. J'ai fait des recherches et essayé moi-même la solution que vous m'aviez donnée mais malheureusement je ne pouvais pas voir la zone de texte en raison du contexte que j'ai choisi. :( –

+0

oh, d'accord, c'est de la malchance – JayK

Répondre

2

Vous pouvez déjà voir le code nécessaire dans votre capture d'écran, il suffit de remplacer la construction d'un StringMorph avec celle d'un TextMorph. Je vous suggère de jeter un oeil au livre Pharo by Example. Il a un chapitre sur Morphic, qui est le cadre de l'interface utilisateur de Pharo.

yourTextMorph := TextMorph new. 
yourTextMorph contents: 'initial text'. 
ownerMorph addMorph: yourTextMorph. 

Je suppose que vous voudrez également lire le contenu à partir du TextMorph. Vous pouvez utiliser yourTextMorph contents pour y parvenir. Voir aussi Pharo Smalltalk: Reading from TextMorph

+0

Merci beaucoup. J'ai été capable de travailler dessus et j'ai mis à jour la question, mais je n'ai pas réussi à extraire les données du champ de saisie même après avoir vérifié le lien que vous avez fourni. pour moi –

+0

pouvez-vous me donner s'il vous plaît quelques directions sur comment je peux obtenir les données outre du champ d'entrée Merci –

+0

@BigSmile comme j'ai écrit: vous pouvez obtenir le texte dans le TextMorph de retour avec 'contenu tempInputField'. Cela vous donnera une instance de la classe Text (qui est une chaîne formatée). Vous aurez besoin de le convertir en un nombre pour votre conversion de température comme ceci: 'inputTemperature: = contenu de tempInputField asNumber.' Mais je devine seulement ce dont vous avez besoin. Qu'est-ce qui ne fonctionne pas exactement? Est-ce qu'un débogueur apparaît à cause d'une erreur? Si oui, quel est le message d'erreur? – JayK

2

Sur un côté non, si vous faites des choses d'interface utilisateur dans Pharo pour autre chose que l'apprentissage (Cela ressemble à OP/is/learning, donc cela ne s'applique probablement pas). Vous devriez regarder Glamour ou Spec. Les deux ont des systèmes de saisie et de contrôle de texte très faciles.

Spec Glamour

+0

Nous vous remercions de votre suggestion. Cependant, j'apprends seulement les bases. –

+0

Il est bon d'apprendre les bases, mais ne vous y mêlez pas trop. Tout est déchiré et remplacé par une chose appelée Bloc (mais je crois que l'API restera). Vous devriez regarder Bloc et Bric pour voir où vont toutes ces choses à l'avenir. – Dusty