Tkinter Anwendung starten?

Fragen zu Tkinter.
Antworten
Teeblatt
User
Beiträge: 2
Registriert: Dienstag 18. Oktober 2011, 14:28

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()

Benutzeravatar
Hyperion
Moderator
Beiträge: 7478
Registriert: Freitag 4. August 2006, 14:56
Wohnort: Hamburg
Kontaktdaten:

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).
encoding_kapiert = all(verstehen(lesen(info)) for info in (Leonidas Folien, Blog, Folien & Text inkl. Python3, utf-8 everywhere))
assert encoding_kapiert
Teeblatt
User
Beiträge: 2
Registriert: Dienstag 18. Oktober 2011, 14:28

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
Benutzeravatar
Hyperion
Moderator
Beiträge: 7478
Registriert: Freitag 4. August 2006, 14:56
Wohnort: Hamburg
Kontaktdaten:

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?
encoding_kapiert = all(verstehen(lesen(info)) for info in (Leonidas Folien, Blog, Folien & Text inkl. Python3, utf-8 everywhere))
assert encoding_kapiert
Antworten