Seite 1 von 1

Problem beim Programm beenden

Verfasst: Samstag 21. August 2010, 00:37
von Pythonia
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

Re: Problem beim Programm beenden

Verfasst: Samstag 21. August 2010, 06:02
von numerix

Code: Alles auswählen

import tkinter as tk

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

Re: Problem beim Programm beenden

Verfasst: Samstag 21. August 2010, 17:40
von 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ß

Re: Problem beim Programm beenden

Verfasst: Samstag 21. August 2010, 22:48
von Pythonia
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 !

Re: Problem beim Programm beenden

Verfasst: Sonntag 22. August 2010, 00:17
von BlackJack
Ein bisschen mehr verrät die Dokumentation: http://docs.python.org/library/sys.html

Re: Problem beim Programm beenden

Verfasst: Sonntag 22. August 2010, 00:17
von 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) ...

Re: Problem beim Programm beenden

Verfasst: Sonntag 22. August 2010, 00:27
von cofi
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.

Re: Problem beim Programm beenden

Verfasst: Sonntag 22. August 2010, 00:39
von 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ß