Programm beendet nicht automatisch

Fragen zu Tkinter.
Antworten
HannesKlarner
User
Beiträge: 7
Registriert: Montag 4. Mai 2009, 11:16
Wohnort: Berlin

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.
Benutzeravatar
numerix
User
Beiträge: 2696
Registriert: Montag 11. Juni 2007, 15:09

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.
HannesKlarner
User
Beiträge: 7
Registriert: Montag 4. Mai 2009, 11:16
Wohnort: Berlin

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.
Benutzeravatar
numerix
User
Beiträge: 2696
Registriert: Montag 11. Juni 2007, 15:09

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
HannesKlarner
User
Beiträge: 7
Registriert: Montag 4. Mai 2009, 11:16
Wohnort: Berlin

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.
Antworten