Tkinter has no attribute Tk

Yzen_712 Messages postés 1 Date d'inscription   Statut Membre Dernière intervention   -  
mamiemando Messages postés 33769 Date d'inscription   Statut Modérateur Dernière intervention   -

Bonjour,

Je suis sous Windows et je voudrais de l'aide avec la bibliothèque tkinter s'il vous plaît.

Par exemple dans ce code

import tkinter

root = tkinter.Tk()
root.mainloop()

Et mon interpreteur me dit :

tkinter has no attribute Tk

Mon fichier ne s'appelle pas tkinter.py ou encore programme.py.

A voir également:

3 réponses

Utilisateur anonyme
 

Bonjour

Essaye comme ça 

from tkinter Tk
root = Tk() 


Pour res prochains posts, merci d'utiliser la coloration syntaxique comme décrit là https://codes-sources.commentcamarche.net/faq/11288-poster-un-extrait-de-code


0
Phil_1857 Messages postés 1872 Date d'inscription   Statut Membre Dernière intervention   168
 

Bonjour,

Heuu, tu voulais surement écrire:

from tkinter import Tk
root = Tk()
0
Utilisateur anonyme
 

Ha oui, bien vu ;)

0
mamiemando Messages postés 33769 Date d'inscription   Statut Modérateur Dernière intervention   7 879
 

Bonjour,

Le code indiqué dans #1 est correct. Le code proposé #2 est une autre manière de l'écrire, mais si la première version n'a pas marché, je doute que cette variante marche.

Selon moi, le problème vient de l'import lui-même : tu n'importes pas le fichier que tu crois.

Pour rappel, lorsqu'on importe un module, python itère sur les dossiers référencés dans sys.path jusqu'à trouver un dossier qui semble fournir le fichier importé :

  • soit le dossier en question porte le nom du module importé et contient un fichier __init__.py ;
  • soit le dossier en question a un nom arbitraire et contient un fichier ".py" qui porte le nom du module ;
  • (si l'on n'est dans aucun de ces cas, python passe au dossier suivant).

Je t'invite donc à regarder quel est le fichier que tu importes réellement.

Pour cela, tu peux ajouter ajouter dans ton script ceci :

import pathlib, sys

def find_module(module_name: str) -> pathlib.Path:
    for d in sys.path:
        for filename in [
            pathlib.Path(d) / f"{module_name}.py",
            pathlib.Path(d) / module_name / "__init__.py"
        ]:      
            if filename.exists():
                return filename
    return None

print(find_module("tkinter"))

La chaîne affichée par le print permettra de voir quel le chemin du module effectivement importé.

Exemple : sous Linux, une installation correcte du python3-tk conduit le script que j'ai proposé à afficher le résultat suivant :

PosixPath('/usr/lib/python3.10/tkinter/__init__.py')

Bonne chance

0