2017-10-19 4 views
2

Ich bin komplett neu in Pharo, Smalltalk. Ich entwickle eine kleine App, die die Temperatur von Fahrenheit in Celsius umwandelt. Kann jemand mir eine Idee geben, wie man ein Eingabefeld mit TextMorph erstellt und es in einem Fenster anzeigt, wie im Screenshot gezeigt. Außerdem können die Daten beim Klicken auf die Schaltfläche aus dem Eingabefeld abgerufen werden. Der folgende Code ist, was ich bisher gemacht habe. ScreenshotPharo Smalltalk: Wie erstellt man ein Eingabefeld mit TextMorph und holt dann die Daten aus dem Eingabefeld?

Die Klasse TemperatureMorph

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

Die Methode initialize: Enthält ein Etikett, Textbox und einen Knopf.

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. 

Dank

+1

Die Tatsache, dass die Lösung direkt vor Ihnen im Screenshot liegt, macht mich fragen, ob Sie etwas selbst versucht haben und haben einige der Forschung getan, bevor diese Frage zu veröffentlichen. – JayK

+0

@Jayk Ja. Ich habe recherchiert und die Lösung selbst versucht, die Sie mir gegeben haben, aber leider konnte ich die Textbox wegen des Hintergrundes nicht sehen, den ich wähle. :( –

+0

oh, okay, das ist Pech. – JayK

Antwort

2

Sie können bereits den notwendigen Code in Ihrem Screenshot sehen, müssen Sie nur den Bau eines StringMorph mit dem eines TextMorph zu ersetzen. Ich schlage vor, Sie werfen einen Blick auf das Pharo by Example Buch. Es hat ein Kapitel über Morphic, welches das UI-Framework in Pharo ist.

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

Ich denke, Sie möchten auch den Inhalt wieder aus dem TextMorph lesen. Sie können yourTextMorph contents verwenden, um das zu erreichen. Siehe auch Pharo Smalltalk: Reading from TextMorph

+0

Vielen Dank, ich habe Ich konnte etwas daran arbeiten und habe die Frage aktualisiert, aber ich konnte die Daten nicht aus dem Eingabefeld entfernen, nachdem ich den Link überprüft habe, den ich selbst erstellt habe. Ich habe diese Lösung sogar selbst gemeistert, aber es scheint nicht zu funktionieren für mich –

+0

können Sie mir bitte einige Anweisungen geben, wie ich die Daten aus dem Eingabefeld bekommen kann .. Danke –

+0

@BigSmile wie ich schrieb: Sie können den Text in der TextMorph zurück mit erhalten 'tempInputField Inhalt'. Dadurch erhalten Sie eine Instanz der Klasse Text (eine formatierte Zeichenfolge). Sie müssen es in eine Zahl für Ihre Temperaturumwandlung wie folgt umwandeln: 'inputTemperature: = tempInputField contents asNumber.' Aber ich rate nur, was Sie brauchen. Was genau funktioniert nicht? Tritt ein Debugger wegen eines Fehlers auf? Wenn ja, was ist die Fehlermeldung? – JayK

2

Auf der anderen Seite, wenn Sie UI Sachen in Pharo für etwas anderes als Lernen (Es sieht aus wie OP/ist/lernen, so dass dies wahrscheinlich nicht gilt). Sie sollten sich entweder Glamour oder Spec ansehen. Beide haben wirklich einfache Texteingabe- und Kontrollsysteme.

Spec Glamour

+0

Vielen Dank für Ihren Vorschlag. Ich lerne jedoch nur die Grundlagen. –

+0

Es ist gut, die Grundlagen zu lernen, aber nicht zu sehr in ihnen involviert zu sein. Alles wird gerippt und durch ein Ding namens Bloc ersetzt (aber ich glaube, dass die API bleiben wird). Sie sollten sich Bloc und Bric ansehen, um zu sehen, wohin all diese Dinge in der Zukunft gehen werden. – Dusty

Verwandte Themen