Prozess beenden, Fenster offen lassen

Fragen zu Tkinter.
Antworten
TengTeng
User
Beiträge: 5
Registriert: Donnerstag 26. Mai 2016, 21:15

Sonntag 3. Juli 2016, 21:38

Moin Moin,

ich habe folgendes Problem:

Ich habe ein Programm mit einer GUI. Mit einem Button kann man nun einen Prozess starten.
Wenn allerdings eine Eingabe fehlt gibt es eine Fehlermeldung (meinerseits). Jetzt sollte der Prozess abgebrochen werden, die Gui aber bleiben und so zu sagen auf einen neuen start warten... Mir ist das in der IDLE mit

Code: Alles auswählen

sys.exit()
gelungen. In eclipse (PyDev) schließt sich dann aber das ganze Fenster.
Bei identischem Code :(
Was ist da jetzt anders?

Ich hoffe ihr könnt mir helfen
Mit vielen Grüßen
TengTeng

PS: In eclipse benutzte ich soweit ich weis den Standartinterpreter
Sirius3
User
Beiträge: 8270
Registriert: Sonntag 21. Oktober 2012, 17:20

Sonntag 3. Juli 2016, 22:11

@TengTeng: IDLE verhält sich in vielen Dingen nicht so wie ein normales Python. sys.exit beendet das Programm. Was Du statt dessen willst, habe ich aus Deiner Beschreibung noch nicht verstanden.
TengTeng
User
Beiträge: 5
Registriert: Donnerstag 26. Mai 2016, 21:15

Sonntag 3. Juli 2016, 22:26

Ok, danke erstmal für die schnelle Antwort.

Ich habe dieses Gui-program, was die ganze zeit laufen soll...
Nun kann man über "Start" bestimmte Eingaben abprüfen.
Wenn aber nun eine oder mehrere Eingaben fehlen gibt das Program eine Fehlermeldung zurück.
Und die Abfrage der Eingaben soll gestoppt werden.
Nun soll das Fenster offen bleiben und warten bis das man von neuem "Strart" drück und alles von neuem Abfragen.


Ich hoffe mein Problem ist nun etwas verständlicher

MVG
TengTeng
Sirius3
User
Beiträge: 8270
Registriert: Sonntag 21. Oktober 2012, 17:20

Sonntag 3. Juli 2016, 22:34

@TengTeng: mit »Fehlermeldung zutückgeben« wird doch die Abfrage schon gestoppt. Für was ist dann das »sys.exit« gut?
TengTeng
User
Beiträge: 5
Registriert: Donnerstag 26. Mai 2016, 21:15

Sonntag 3. Juli 2016, 22:41

Das ist ja das Problem, die Fehlermeldung gibt leidlich zurück das etwas fehlt und gibt dann an eine Funktion ab, die das dann beenden soll. Aber halt nicht das Fenster schließt.

Ein Beispiel:

Code: Alles auswählen

def brot():

    if v_b.get() == 1:
        v_brotart = "Klassikbrot"
    elif v_b.get() == 2:   
        v_brotart = "Anderes"
    else:
        t_ausgabe.insert("end","Fehler: Brotart wählen\n", "r")
        error_end()
        
    t_ausgabe.insert("end", v_brotart + " wird getoastest")
    pg.step(20)

def error_end():
    t_ausgabe.see("end")
    pg.stop()
    sys.exit()
Und das klappt mit sys.exit() nicht, weil sich das das ganze Fenster schließt....
Zuletzt geändert von Anonymous am Montag 4. Juli 2016, 11:23, insgesamt 1-mal geändert.
Grund: Quelltext in Python-Codebox-Tags gesetzt.
Sirius3
User
Beiträge: 8270
Registriert: Sonntag 21. Oktober 2012, 17:20

Montag 4. Juli 2016, 06:57

@TengTeng: ich verstehe immer noch nicht ganz, wo das Problem liegt, das Du mit sys.exit zu lösen versuchst. Es gibt nämlich keins.

PS: das Voranstellen von willkürlichen Buchstaben vor Variablennamen solltest Du sein lassen. Heißt 'v_' wirklich Variable? Statt dessen solltest Du Dir aussagekräftige Namen aussuchen (b?) Funktionen werden nach einer Tätigkeit benannt, z.B: start_toasting.
BlackJack

Montag 4. Juli 2016, 23:12

@TengTeng: Also ich würde das Objekt das die Geschäftslogik kapselt im Fehlerfall einfach verwerfen und ein neues erstellen um damit den Vorgang wieder am Anfang zu starten. Eventuell muss man in den entsprechenden GUI-Objekten dann eine Re-Initialisierung vorsehen, oder eben auch die entsprechenden GUI-Elemente oder gar Fenster verwerfen und neu erzeugen. Dazu müsstest Du dann von diesen ”Funktionen” weg die keine sind, und auch von den globalen Variablen.
Antworten