Seite 1 von 1
Programm beendet nicht automatisch
Verfasst: Montag 4. Mai 2009, 14:32
von HannesKlarner
Hallo,
ich habe ein paar Tkinter Beispiel Skripte ausprobiert und dabei festgestellt, daß es zum vollständigen Beenden nicht reicht das Fenster zu schließen: Ein Teil des Programms läuft im Hintergrund weiter und verhindert, daß ich ein anderes Skript ausführen kann.
Quellcode zB das 3. Skript hier:
http://www-alt.physik.uni-muenchen.de/k ... ode38.html
vermutlich läuft der mainloop weiter. Weiß jemand woran das liegt?
danke,
Hannes.
Re: Programm beendet nicht automatisch
Verfasst: Montag 4. Mai 2009, 14:45
von numerix
HannesKlarner hat geschrieben:vermutlich läuft der mainloop weiter. Weiß jemand woran das liegt?
Du hast nicht zufällig das Programm aus IDLE heraus gestartet?
IDLE selbst ist ein Tkinter-Programm und hat eine eigene mainloop().
Falls du IDLE benutzt: Lass den Aufruf von mainloop() mal weg: Funktioniert es dann so wie möchtest?
Oder - sollte auch funktionieren - nicht nur das GUI-Programm selbst schließen, sondern auch das integrierte Konsolenfenster von IDLE.
Verfasst: Montag 4. Mai 2009, 15:07
von HannesKlarner
stimmt ich benutze IDLE, und wenn ich mainloop() weg lasse, kann ich durch fenster schliessen wieder die konsole benutzen. IDLE Benutzer sollten also einfach mainloop() weglassen. Ok.
noch ein, zwei kurze Fragen:
(1) Wenn ich eine Eigenschaft eines Canvas Objektes, wie create_line, nachträglich ändern möchte, wie kann ich dieses Objekt dann ansprechen? Gibt es dafür globale Variablendeklaration oder kann man den Objekten Namen geben?
(2) Kann ich eine Eigenschaft mehrerer Instanzen global ändern. ZB. die Farbe aller Linien auf einmal ändern
Danke,
Hannes.
Verfasst: Montag 4. Mai 2009, 15:15
von BlackJack
Verfasst: Montag 4. Mai 2009, 15:41
von numerix
HannesKlarner hat geschrieben:stimmt ich benutze IDLE, und wenn ich mainloop() weg lasse, kann ich durch fenster schliessen wieder die konsole benutzen. IDLE Benutzer sollten also einfach mainloop() weglassen. Ok.
Würde ich eher nicht empfehlen, weil die Programme sonst beim Ausführen aus einer anderen IDE oder aus der Konsole o.ä. nicht "offen" bleiben, sondern sich das Fenster sofort wieder schließt, wenn das Programm einmal durchgelaufen ist.
Normalerweise sollte das von dir beschriebene Verhalten auch nicht auftreten. Evtl. hat es damit zu tun, ob IDLE mit/ohne Subprozess gestartet wird. Dann müsste es aber helfen, wenn du die IDLE-Shell zusätzlich schließt und nicht nur die eigentliche Anwendung.
Zu deinen anderen Fragen hier drei Links zu brauchbarer Doku:
http://infohost.nmt.edu/tcc/help/pubs/tkinter/
http://effbot.org/tkinterbook/tkinter-index.htm
http://docs.python.org/library/tk.html
Verfasst: Montag 4. Mai 2009, 17:38
von HannesKlarner
Evtl. hat es damit zu tun, ob IDLE mit/ohne Subprozess gestartet wird. Dann müsste es aber helfen, wenn du die IDLE-Shell zusätzlich schließt und nicht nur die eigentliche Anwendung.
Stimmt, wenn ich die IDLE-Shell schließe gehts auch mit mainloop().
Da ich aber alle paar Zeilen neuen Code ausprobiere, müßte ich dann dauernd Shells schließen, wenn ich mainloop() reinnehme. Deshalb erstmal ohne, solange ich das Skript noch schreibe.
Ich könnte natürlich auch einen Editor benutzen..
Danke für die Links, nach tags hab ich gesucht.