Seite 1 von 1

Tkinter Anwendung starten?

Verfasst: Dienstag 18. Oktober 2011, 14:33
von Teeblatt
Hallo liebes Forum,

ich bin neu in Python und versuche hier gerade ein Buchbeispiel zu starten.
Es handelt sich um das Buch "Das Python Praxisbuch". Ich benutze MacOSX und arbeite mit der IDE PyCharm ( Mit IDLE funktioniert es aber auch nicht) . Python Version 2.7.x

Das Codebeispiel habe ich abgetippt und möchte es nun gerne wie gewohnt über starten. Bei Konsolenanwendungen klappt alles, bei der GUI Anwendung passiert aber nichts. Meine Konsole Zeit mir trotzdem an "Process finished with exit code 0"

Weiß jemand was ich falsch mache? Ich hatte mir eigentlich vorgestellt das sobald ich den 'Run' Knopf drücke auch das Anwendungsfenster aufploppt.

Viele Grüße

Teeblatt

Code: Alles auswählen

import sys
from Tkinter import *

def build_gui():

    rootWindow = Tk()
    rootWindow.wm_geometry("500x200")

    label1 = Label(rootWindow)
    label1['text'] = "Hello, Tkinter World!"

    label2 = Label(rootWindow)
    label2['text'] = "Whats your name?"
    label2.pack()

    nameEntry = Entry(rootWindow)
    nameEntry.bind('<Key-Return>', entry_callback)
    nameEntry.pack(fill=X)

    okButton = Button(rootWindow)
    okButton['text'] = 'OK'
    okButton['command'] = entry_callback
    okButton.pack(fill=X)

    exitButton = Button(rootWindow)
    exitButton['text'] = 'Exit'
    exitButton['command'] = exit_callback
    exitButton.pack(fill=X)

    outLabel = Label(rootWindow)
    outLabel['text'] = ''
    outLabel.pack()

    return rootWindow, nameEntry, outLabel

def entry_callback(event=None):
    name = theEntry.get()
    theLabel['text'] = "Nice to meet you, %s " %name

def exit_callback():
    sys.exit(0)

def main():
    global theRoot, theEntry, theLabel
    theRoot, theEntry, theLabel = build_gui()
    theRoot.mainloop()


Re: Tkinter Anwendung starten?

Verfasst: Dienstag 18. Oktober 2011, 14:38
von Hyperion
Ergänze das mal am Schluss um diese beiden Zeilen:

Code: Alles auswählen

if __name__ == "__main__":
    main()
Dann sollte das klappen...

Nebenbei ist das ziemlich mieser Code. Sollte der tatsächlich so im Buch stehen, so ist zumindest dieses Beispiel nicht zur Nachahmung empfohlen. Stichwort `global` und Sternchen-Importe...

Generell: Ich halte nichts davon, direkt mit GUI-Anwendungen zu starten. Aber da scheiden sich wohl die Geister. Wird auf jeden Fall auch mal einen Blick ins offizielle Tutorial (in der Doku enthalten).

Re: Tkinter Anwendung starten?

Verfasst: Dienstag 18. Oktober 2011, 14:47
von Teeblatt
Hyperion hat geschrieben:Ergänze das mal am Schluss um diese beiden Zeilen:

Code: Alles auswählen

if __name__ == "__main__":
    main()
Dann sollte das klappen...

Nebenbei ist das ziemlich mieser Code. Sollte der tatsächlich so im Buch stehen, so ist zumindest dieses Beispiel nicht zur Nachahmung empfohlen. Stichwort `global` und Sternchen-Importe...

Generell: Ich halte nichts davon, direkt mit GUI-Anwendungen zu starten. Aber da scheiden sich wohl die Geister. Wird auf jeden Fall auch mal einen Blick ins offizielle Tutorial (in der Doku enthalten).
Danke für den schnell Tipp. Nun klappt es. Gerade sehe ich , ich hätte vielleicht mal weiter Blättern sollen... Steht nämlich auch im Buch... Der Autor startet nicht mit GUI Anwendungen. Er wollte nur das HelloWorld Programm als GUI Anwendung demonstrieren - obs das jetzt gebracht hat... :K

Warum das jetzt mieser Code ist kann ich (noch) nicht nachvollziehen. Kannst du vielleicht sagen was an Sternen und global Importen verkehrt ist ?

Liebe Grüße

Teeblatt

Re: Tkinter Anwendung starten?

Verfasst: Dienstag 18. Oktober 2011, 15:06
von Hyperion
Teeblatt hat geschrieben: Warum das jetzt mieser Code ist kann ich (noch) nicht nachvollziehen. Kannst du vielleicht sagen was an Sternen und global Importen verkehrt ist ?
Auch das kannst Du eigentlich erst dann verstehen, wenn Du weiter in der Materie drin steckst. Insofern musst Du da meiner Aussage vertrauen - oder besser: googlen oder im Forum danach suchen. Dann wirst Du hoffentlich sehen, dass auch viele andere das so sehen ;-)

Evtl. kann jemand anderes eine einfache Erklärung für Neulinge für diese Problematik finden?