Konsole in GUI- Fenster
Code: Alles auswählen
def floatx(value):
try:
value = float(value)
return value
break
except ValueError:
print "Na das ist aber keine Zahl!"
while True:
eingabe = raw_input("Eingabewert? ")
ausgabe=floatx(eingabe)
print ausgabe
Warum funktioniert das nicht? --> Fehler: break in Loop??
Das ``break`` steht nicht in einer Schleife. Es würde allerdings sowieso nie ausgeführt, weil das ``return`` in der Zeile darüber den Ablauf der Funktion ja schon abbricht.
Allerdings hättest Du auf diese Weise immer noch 50 ``while``-Schleifen. Die Schleife sollte man mit in die Funktion stecken. Die 50 Aufrufe sollten dann ungefähr so aussehen:
Allerdings hättest Du auf diese Weise immer noch 50 ``while``-Schleifen. Die Schleife sollte man mit in die Funktion stecken. Die 50 Aufrufe sollten dann ungefähr so aussehen:
Code: Alles auswählen
wert = float_input('Eingabewert? ')
Das verstehe ich nicht.
jeder Eingabewert hat einen anderen Namen und wird durch einen anderen string hinter raw_input beschrieben.
-> (konntest Du nicht wissen)
Deshalb dachte ich an die obige Lösung, wenn aber die Schleife in der Funktion steckt, müßte auch die Eingabe in der Funktion sein, oder?
Also doch 50 Schleifen?
jeder Eingabewert hat einen anderen Namen und wird durch einen anderen string hinter raw_input beschrieben.
-> (konntest Du nicht wissen)
Deshalb dachte ich an die obige Lösung, wenn aber die Schleife in der Funktion steckt, müßte auch die Eingabe in der Funktion sein, oder?
Also doch 50 Schleifen?

Okay, Aufruf der neuen Funktion für zwei verschiedene Werte:
Zwei Werte die an verschiedene Namen gebunden werden, mit einer eigenen Zeichenkette als Prompt. In der `float_input()` ist weiterhin nur *eine* Schleife.
Code: Alles auswählen
radius = float_input('Bitte den Radius eingeben: ')
hoehe = float_input('Und die Hoehe: ')
Zwei Werte die an verschiedene Namen gebunden werden, mit einer eigenen Zeichenkette als Prompt. In der `float_input()` ist weiterhin nur *eine* Schleife.
Code: Alles auswählen
def float_input(value):
while True:
try:
value = float(value)
return value
break
except ValueError:
print "Na das ist aber keine Zahl!"
radius = float_input('Bitte den Radius eingeben: ')
hoehe = float_input('Und die Hoehe: ')
print radius
print hoehe
Entschuldigung, wenn ich als Anfänger nerve, aber ich steh irgendwie auf dem Schlauch

Hier wird doch jedesmal ein String in die Funktion übergeben, oder?
Zuletzt geändert von mathi am Montag 21. Januar 2008, 12:30, insgesamt 1-mal geändert.
Code: Alles auswählen
def float_input(prompt):
while True:
try:
return float(raw_input(prompt))
except ValueError:
print "Na das ist aber keine Zahl!"
radius = float_input('Bitte den Radius eingeben: ')
hoehe = float_input('Und die Hoehe: ')
print radius
print hoehe
Jetzt klarer? Du darfst natürlich nicht das raw_input vergessen, und mit dem Return kannst du dir das Break sparen, da die Schleife dann nicht mehr weiterläuft.
BlackJack hat geschrieben:Das "einfachste" wäre es wahrscheinlich so eine "Konsole" aus einem `Text`-Widget für die Ausgaben und einem `Entry` für die Eingaben zu programmieren, und das über Sockets mit Deinem ``print``/`raw_input()` verwendenden Quelltext so zu verbinden, dass `sys.stdin` und `sys.stdout` mit dieser Konsole verbunden sind.
Das Hauptproblem ist, dass bei ``print``/`rawinput()` Dein Programm die zeitliche Abfolge bestimmt, GUIs aber ereignisbasiert sind, d.h. der Anwender letztendlich bestimmt wann welcher Code ausgeführt wird. Beides zu mischen verträgt sich nicht so besonders gut.
Oder Du ersetzt `raw_input()` durch eine Funktion die jedesmal ein Fenster mit dem Prompt und einem Entry aufmacht. Das ist zwar einfacher, aber für den Benutzer eine ziemlich lästige GUI.
Im Idealfall hast Du beim bisherigen Quelltext Anwendungslogik und UI voneinander getrennt. Dann kannst Du Deine GUI Stück für Stück aufbauen. Es ist zwar dann erst zum Schluss der ganze Funktionsumfang verfügbar, aber es gibt immer eine funktionierende Teilmenge davon.
also mein Programm habe ich mir so vorgestellt:
eine Reihe von Buttons, jeder Button startet ein Programm, welches aber in einer Konsole läuft. mehr wollte ich eigentlich nicht. Habe ich eine Chance das mit geringem Aufwand zu schaffen? sonst bleibt die Programmauswahl über eine Variable j=1,2,...,n
edit: ich könnte mir auch eine GUI vorstellen, bei der auf Knopfdruck eine konsole geöffnet wird: in Windows ähnlich dem Befehl cmd und in linux z.B. konsole (KDE)

- nkoehring
- User
- Beiträge: 543
- Registriert: Mittwoch 7. Februar 2007, 17:37
- Wohnort: naehe Halle/Saale
- Kontaktdaten:
mathi hat geschrieben:also mein Programm habe ich mir so vorgestellt:
eine Reihe von Buttons, jeder Button startet ein Programm, welches aber in einer Konsole läuft. mehr wollte ich eigentlich nicht. Habe ich eine Chance das mit geringem Aufwand zu schaffen? sonst bleibt die Programmauswahl über eine Variable j=1,2,...,n
edit: ich könnte mir auch eine GUI vorstellen, bei der auf Knopfdruck eine konsole geöffnet wird: in Windows ähnlich dem Befehl cmd und in linux z.B. konsole (KDE)
Also wenn das alles ist, brauchst du nur die Ausgaben des Programmes abfangen und ausgeben. Bitte beachte aber, das es nicht so einfach ist, dem Programm Eingaben zu verpassen, wenn man sie nicht gleich als Argument uebergeben kann!
Also nochmal der Einfachheit halber:
Argumente sind Parameter, die beim Start uebergeben werden, zB:
programm.exe -arg1 -arg2 -arg3
Stdin heißt Standard-Input. Startest du ein Programm in der Konsole, welches dich nach dem Start zur Eingabe auffordert, dann erfolgt diese Eingabe ueber den Stdin.
Liefern deine Programme die du per Button starten moechtest nur Ausgaben, oder brauchst du auch den Stdin?
im Grunde folgt mein Programm bis jetzt folgendem Muster(alles in der Konsole):
j= 0,1,2,...,n (mittels raw_input)
für j=1:
starte Programm 1:
eingabe mit raw_input,
ausgabe mit print,
sichern=file('Ergebnisse.txt','a')
sichern.write( jeweilige Zeile)
Ich möchte mit der GUI wirklich nur den Wert j auswählen, der Rest soll weiter in der Konsole bleiben.
Ich dachte halt an eine Reihe Buttons und darunter ein Konsolefenster - alles in einem Hauptfenster. Und wenn das schlecht geht, dann wollte ich eben als Krücke ein gesondertes Konsolenfenster öffnen
j= 0,1,2,...,n (mittels raw_input)
für j=1:
starte Programm 1:
eingabe mit raw_input,
ausgabe mit print,
sichern=file('Ergebnisse.txt','a')
sichern.write( jeweilige Zeile)
Ich möchte mit der GUI wirklich nur den Wert j auswählen, der Rest soll weiter in der Konsole bleiben.
Ich dachte halt an eine Reihe Buttons und darunter ein Konsolefenster - alles in einem Hauptfenster. Und wenn das schlecht geht, dann wollte ich eben als Krücke ein gesondertes Konsolenfenster öffnen

Wer ist online?
Mitglieder in diesem Forum: Bing [Bot]