J'essaie de tester le code GUI en utilisant Python 3.2 avec la bibliothèque standard Tkinter mais je ne peux pas importer la bibliothèque.
Voici mon code de test:
from Tkinter import *
root = Tk()
w = Label(root, text="Hello, world!")
w.pack()
root.mainloop()
Le shell signale cette erreur:
Traceback (most recent call last):
File "<pyshell#9>", line 1, in <module>
from Tkinter import *
ImportError: No module named Tkinter
La racine du problème est que le module Tkinter est nommé Tkinter
(majuscule "T") dans python 2.x, et tkinter
(minuscule "t ") dans python 3.x.
Pour faire fonctionner votre code dans les deux Python 2 et 3, vous pouvez faire quelque chose comme ceci:
try:
# for Python2
from Tkinter import *
except ImportError:
# for Python3
from tkinter import *
Cependant, PEP8 a ceci à dire sur les importations de caractères génériques:
Les importations de caractères génériques (depuis <module> import *) doivent être évitées
Malgré d'innombrables tutoriels qui ignorent PEP8, la façon d'importer conforme à PEP8 serait quelque chose comme ceci:
import tkinter as tk
Lors de l'importation de cette manière, vous devez préfixer toutes les commandes tkinter avec tk.
(Par exemple: root = tk.Tk()
, etc.). Cela rendra votre code plus facile à comprendre au détriment d'un peu plus de frappe. Étant donné que tkinter et ttk sont souvent utilisés ensemble et importent des classes du même nom, c'est une bonne chose. Comme l'indique Zen of python : "explicite vaut mieux qu'implicite".
Remarque: La partie as tk
Est facultative, mais vous permet de taper un peu moins: tk.Button(...)
vs tkinter.Button(...)
Le module s'appelle tkinter
, pas Tkinter
, dans 3.x.
Réécrivez le code comme suit avec Tkinter
en tkinter
(minuscule) pour 3.x:
from tkinter import *
root = Tk()
w = Label(root, text="Hello, world!")
w.pack()
root.mainloop()