AttributeError: module 'tkinter' has no attribute 'tk/TK'

L I V E Stammtisch ab 20:30 Uhr im Chat
  • Hallo,

    so nachdem ich das Problem mit dem Modul "tkinter" gelöst habe (oder auch nicht), habe ich das Problem "AttributeError: module 'tkinter' has no attribute 'tk/TK'"
    mit meinem ersten Beispiel: python3 beispiel1.py

    Das Beispiel habe ich aus dem Buch Python3 von Rheinwerk Computing.

    MfG

    Juergen B.
    :s

  • AttributeError: module 'tkinter' has no attribute 'tk/TK'? Schau mal ob du hier fündig wirst!

  • Also:

    1. Du führst das Script mit Python 3 aus, richtig? Dann kannst du dir den Shebang sparen.
    2. Die sersionsabhängigen Importe sind falsch. Richtig wäre import Tkinter as tkinter, da du im Programm das modul als tkinter ansprichst.
    3. Auch wenn wir wissen, aus welcher Zeile der Fehler kommt, bitt immmer das komplette Traceback incl. Zeilennummern posten.

    Zum Problem:
    Ich hab mal im Netz was ähnliches gesehen, ich vermute eine falsch/unvollständige Installation von Tkinter. Mach mal folgendes und poste das Ergebnis:

    Code
    $ python3
    >>> import tkinter
    >>> tkinter
    >>> dir(tkinter)

    EDIT: Die datei heißt ganz sicher beispiel1.py und NICHT tkinter.py, ja?

    LG

  • Hallo,

    vielen Dank für die schnelle Antwort (schneller als die Polizei erlaubt).
    Habe meine Datei beispiel1.py wie unten gezeigt und es läuft.

    Zur Frage Ausgabe von:

    Code
    # python3
    import tkinter
    tkinter
    dir(tkinter)
    Code
    Python 3.5.1 (default, Mar 17 2017, 16:54:06)
    [GCC 4.6.3] on linux
    Type "help", "copyright", "credits" or "license" for more information.
    >>> import tkinter
    >>> tkinter
    <module 'tkinter' from '/usr/local/lib/python3.5/tkinter/__init__.py'>
    >>> dir(tkinter)
    ['ACTIVE', 'ALL', 'ANCHOR', 'ARC', 'BASELINE', 'BEVEL', 'BOTH', 'BOTTOM', 'BROWSE', 'BUTT', 'BaseWidget', 'BitmapImage', 'BooleanVar', 'Button', 'CASCADE', 'CENTER', 'CHAR', 'CHECKBUTTON', 'CHORD', 'COMMAND', 'CURRENT', 'CallWrapper', 'Canvas', 'Checkbutton', 'DISABLED', 'DOTBOX', 'DoubleVar', 'E', 'END', 'EW', 'EXCEPTION', 'EXTENDED', 'Entry', 'Event', 'FALSE', 'FIRST', 'FLAT', 'Frame', 'GROOVE', 'Grid', 'HIDDEN', 'HORIZONTAL', 'INSERT', 'INSIDE', 'Image', 'IntVar', 'LAST', 'LEFT', 'Label', 'LabelFrame', 'Listbox', 'MITER', 'MOVETO', 'MULTIPLE', 'Menu', 'Menubutton', 'Message', 'Misc', 'N', 'NE', 'NO', 'NONE', 'NORMAL', 'NS', 'NSEW', 'NUMERIC', 'NW', 'NoDefaultRoot', 'OFF', 'ON', 'OUTSIDE', 'OptionMenu', 'PAGES', 'PIESLICE', 'PROJECTING', 'Pack', 'PanedWindow', 'PhotoImage', 'Place', 'RADIOBUTTON', 'RAISED', 'READABLE', 'RIDGE', 'RIGHT', 'ROUND', 'Radiobutton', 'S', 'SCROLL', 'SE', 'SEL', 'SEL_FIRST', 'SEL_LAST', 'SEPARATOR', 'SINGLE', 'SOLID', 'SUNKEN', 'SW', 'Scale', 'Scrollbar', 'Spinbox', 'StringVar', 'TOP', 'TRUE', 'Tcl', 'TclError', 'TclVersion', 'Text', 'Tk', 'TkVersion', 'Toplevel', 'UNDERLINE', 'UNITS', 'VERTICAL', 'Variable', 'W', 'WORD', 'WRITABLE', 'Widget', 'Wm', 'X', 'XView', 'Y', 'YES', 'YView', '__builtins__', '__cached__', '__doc__', '__file__', '__loader__', '__name__', '__package__', '__path__', '__spec__', '_cnfmerge', '_default_root', '_exit', '_flatten', '_join', '_magic_re', '_setit', '_space_re', '_splitdict', '_stringify', '_support_default_root', '_test', '_tkerror', '_tkinter', '_varnum', 'constants', 'getboolean', 'getdouble', 'getint', 'image_names', 'image_types', 'mainloop', 're', 'sys', 'wantobjects']


    Das mit dem Hinweis auf: "import Tkinter as tkinter" ist mir nicht klar, da ja das Modul in Python 2.7 Tkinter und in Python3 tkinter heißt.
    Kann ich ja aber mal probieren.
    Auf jedenfalls habe ich wieder etwas gelernt (dir(tkinter) zeigt mir alle Attribute).

    MfG

    Juergen B.
    :danke_ATDE:

  • Also geht es jetzt? Wenn ja, gut :)

    Zitat

    Das mit dem Hinweis auf: "import Tkinter as tkinter" ist mir nicht klar, da ja das Modul in Python 2.7 Tkinter und in Python3 tkinter heißt.

    Du kannst module oder packages importen und unter einem anderen Namen zur Verfügung stellen, d.h. variablen zuweisen. Das macht Sinn wenn ein Modul mal umbenannt wurde wie bei Tkinter/tkinter:

    Code
    try:
           # Python 2
           import Tkinter as tkinter
    except ImportError:
           # Python 3
           import tkinter
    # Jetzt kannst du tkinter.Tk() etc benutzten, egal ob Py 2 oder 3, da das Tkinter modul von Python 2 als tkinter importiert wurde :)

    Oder bei extrem langen Modulnamen:

    Python
    import whatever_freaking_long_package as pkg
    from whatever_freaking_long_package.another_freaking_long_submodule import a_very_very_very_cool_and_useful_function as another_func
    
    
    pkg.func()
    another_func()

    ist besser als

    Code
    import whatever_freaking_long_package
    
    
    whatever_freaking_long_package.func()
    whatever_freaking_long_package.another_freaking_long_submodule.a_very_very_very_cool_and_useful_function()


    LG

Jetzt mitmachen!

Du hast noch kein Benutzerkonto auf unserer Seite? Registriere dich kostenlos und nimm an unserer Community teil!