Problem beim Programm beenden

Fragen zu Tkinter.
Antworten
Pythonia
User
Beiträge: 5
Registriert: Freitag 14. Mai 2010, 21:38

hallo, ich hab heute das erste Mal in Python eine GUI-Anwendung geschrieben, deshalb könnte man den Schwieirgkeitsgrad meiner Frage auf Baby-Nievau einschätzen (naja das gilt nur für Die Experten hier;)); es geht darum, dass wenn ich das Programm starte, ich es nicht wieder mit dem "Betätigen des Button" "beenden" kann.

Hier ist erst der einfache Code, unten zeige ich dann die "Fehlermeldung(?) !...:

Code: Alles auswählen

import sys, tkinter

def ende():
    sys.exit(0)

main = tkinter.Tk()

b = tkinter.Button(main, text = "Ende", command = ende)
b.pack()

main.mainloop()
Wenn ich auf den Button draufklicke, taucht auf "Python Shell" diese Fehlermeldung(?) auf:

Code: Alles auswählen

Traceback (most recent call last):
  File "C:\Python30\...\...\1.GUI-Anwednung.py", line 36, in <module>
    main.mainloop()
  File "C:\Python30\lib\tkinter\__init__.py", line 1009, in mainloop
    self.tk.mainloop(n)
  File "C:\Python30\lib\tkinter\__init__.py", line 1401, in __call__
    raise SystemExit(msg)
SystemExit: 0
Benutzeravatar
numerix
User
Beiträge: 2696
Registriert: Montag 11. Juni 2007, 15:09

Code: Alles auswählen

import tkinter as tk

root = tk.Tk()
tk.Button(root,text="Ende",command=quit).pack()
root.mainloop()
problembär

Find's so besser:

Code: Alles auswählen

import tkinter

main = tkinter.Tk()

b = tkinter.Button(main, text = "Ende", command = main.destroy)
b.pack()

main.mainloop()
Gruß
Pythonia
User
Beiträge: 5
Registriert: Freitag 14. Mai 2010, 21:38

problembär hat geschrieben:Find's so besser
also es ist nicht nur "besser", sondern auch EINFACHER, also es ist nicht kompliziert, du hast an meinem Code fast nichts geändert und hast nur kurz was dazu geschrieben und mein Problem war gelöst :)
danke dir,...
und bei dem ersten Vorschlag ging bei mir nicht nur das kleine "Fenster" zu, sondern auch allgemein das Python Shell
naja trotzdem danke auch dir :)
----------------
und achja ! , könnt ihr mich mal wegen dem Modul "sys" aufklären,...
ich habe nur diese Definition, aber es sagt mir wirklich fast GAR NICHTS :? :
"Sys--->Systemspezifische Parameter und Funktionen" ...

danke !
problembär

Pythonia hat geschrieben:und achja ! , könnt ihr mich mal wegen dem Modul "sys" aufklären,...
ich habe nur diese Definition, aber es sagt mir wirklich fast GAR NICHTS :? :
"Sys--->Systemspezifische Parameter und Funktionen" ...
Na ja, das ist halt das Modul, das viele Funktionen bereitstellt, die mit dem Betriebssystem zu tun haben:

http://docs.python.org/library/sys.html

Code: Alles auswählen

sys.exit(0)
ist z.B. ok, wenn man ein Nur-Text-Programm vorzeitig beenden will. Da das aber sofort alles abbricht, ist das für grafische Oberflächen (wie tkinter) nicht zu empfehlen.
Mit

Code: Alles auswählen

print(sys.platform)
kannst das Python-Skript z.B. abfragen, welches Betriebssystem läuft oder mit

Code: Alles auswählen

print(sys.version)
welche Python-Version läuft. Und so weiter.

Gruß

P.S.: Das war jetzt der Versuch von Python 3.x-Syntax (ich verwende aber 2.x) ...
Benutzeravatar
cofi
Python-Forum Veteran
Beiträge: 4432
Registriert: Sonntag 30. März 2008, 04:16
Wohnort: RGFybXN0YWR0

problembär hat geschrieben:Na ja, das ist halt das Modul, das viele Funktionen bereitstellt, die mit dem Betriebssystem zu tun haben
Aber nur wenn man den Interpreter als Betriebssystem ansieht. SCNR :roll:

@OP: Du solltest dir wirklich ueberlegen python3.1 statt 3.0 einzusetzen, da von der Benutzung von letzterem abgeraten wird.
problembär

cofi hat geschrieben:
problembär hat geschrieben:Na ja, das ist halt das Modul, das viele Funktionen bereitstellt, die mit dem Betriebssystem zu tun haben
Aber nur wenn man den Interpreter als Betriebssystem ansieht. SCNR :roll:
Oh, dann hab' ich wohl wieder was dazugelernt, bei "sys" geht es also um den Interpreter :oops:. Danke. Logisch, für's Betriebssystem ist ja auch eher das "os"-Modul. Manches scheint sich aber auch zu überschneiden, z.B. "sys.platform" und "os.name".
Die Kanäle "stdin" und "stdout" scheinen zwar auch mit dem Interpreter, aber doch auch mit dessen Umgebung, also doch auch irgendwie mit dem Betriebssystem zusammenzuhängen. Hmmm, na ja, irgendwo muß man das ja einem Modul zuordnen. Also: Interpreter :).

Gruß
Antworten