13 gelbe Warndreicke - Buch-Code gibt Rätsel auf

Wenn du dir nicht sicher bist, in welchem der anderen Foren du die Frage stellen sollst, dann bist du hier im Forum für allgemeine Fragen sicher richtig.
Antworten
Benutzeravatar
Strawk
User
Beiträge: 233
Registriert: Mittwoch 15. Februar 2017, 11:42
Wohnort: Aachen
Kontaktdaten:

Code: Alles auswählen

# -*- coding: utf-8 -*-
"""
Created on Mon Sep 11 16:11:26 2017

@author: Karl Kraft
"""

import sys
from Tkinter import *

def build_gui():
    "Build the GUI, Return root, entry, and personalized greeting label"

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

    label1 = Label(rootWindow)
    label1['text'] = "Hello, Tkinter World!"
    label1.pack()
    
    label2 = Label(rootWindow)
    label2['text'] = "What's 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):
    "Called when the Return key is hit in the entry field or OK is clicked"
    name = theEntry.get()
    theLabel['text'] = "Nice to meet you, %s" % name

def exit_callback():
    "Called when the Exit button is hit"
    sys.exit(0)
    
def main():
    global theRoot, theEntry, theLabel
    theRoot, theEntry, theLabel = build_gui()
    theRoot.mainloop()

if __name__ == '__main__':
    main()
Hallo Nutzer!
Als Python-Neuling arbeite ich mit dem Buch:
Farid Hajji: Das Python Praxisbuch – Der große Profi-Leitfaden für Programmierer.
Es geht schon beschissen los! Ich habe den Code von Seite 78 minutiös eingetippt (hängt diesem Forumsbeitrag an) und erhalte 13 gelbe Warndreiecke. (als Entwicklungsumgebung nutze ich Anaconda Navigator 1.4.3 bzw. spyder 3.1.2) Lasse ich das Skript laufen, stürzt es ab.
Was läuft hier schief?
Grüße,
Strawk
Ich programmiere erfolglos, also bin ich nicht.
Benutzeravatar
kbr
User
Beiträge: 1487
Registriert: Mittwoch 15. Oktober 2008, 09:27

@Strawk: Für eine Beantwortung der Frage musst Du die Fehlermeldung gleichfalls posten.
Abgesehen davon gehört das Buch von Farid Hajji zu den besseren deutschsprachigen Quellen. Allerdings ist es schon etwas älter und basiert auf Python 2.5. Kann es sein, dass Du mit Python 3 unterwegs bist?
Sirius3
User
Beiträge: 17750
Registriert: Sonntag 21. Oktober 2012, 17:20

@kbr: mag ja sein, dass es besser ist, aber global, Sternchenimporte und sys.exit haben in einem Programm trotzdem nichts zu suchen.

@Strawk: Die Warnschilder kommen allesamt daher, dass das Programm Sternchenimporte verwendet, sind also ein Hinweis darauf, dass hier potentiell ein Problem bestehen könnte.
Zuletzt geändert von Sirius3 am Dienstag 12. September 2017, 09:54, insgesamt 1-mal geändert.
Kniffte
User
Beiträge: 64
Registriert: Dienstag 27. September 2016, 11:05

@Strawk:
Ich hab es getestet...funktioniert in python2 & 3.
Wenn du Python 3 verwendest, wie kbr vermutet:
Dann mach aus

Code: Alles auswählen

from Tkinter import *
das:

Code: Alles auswählen

from tkinter import *
oder

Code: Alles auswählen

try:
    from Tkinter import *
except ImportError:
    from tkinter import *
PS:
Importe mit * sollte man vermeiden
besser:

Code: Alles auswählen

import tkinter as tk
und dann z.B.
statt

Code: Alles auswählen

 label1 = Label(rootWindow)

Code: Alles auswählen

label1 = tk.Label(rootWindow)
& bzgl. der Hinweise von Sirius3 solltest du mal "googlen"
Antworten