2011-09-21 18 views
18

Sto provando a testare il codice GUI utilizzando Python 3.2 con la libreria standard Tkinter ma non riesco a importare la libreria.ImportError durante l'importazione di Tkinter in Python

Questo è il mio codice di prova:

from Tkinter import * 

root = Tk() 
w = Label(root, text="Hello, world!") 
w.pack() 
root.mainloop() 

Le relazioni shell questo errore:

Traceback (most recent call last): 
File "<pyshell#9>", line 1, in <module> 
from Tkinter import * 
ImportError: No module named Tkinter 

risposta

27

La radice del problema è che il modulo Tkinter è chiamato Tkinter (capitale "T") in Python 2 .x e tkinter ("t" minuscolo) in python 3.x.

per rendere il lavoro di codice sia in Python 2 e 3 si può fare qualcosa di simile:

try: 
    # for Python2 
    from Tkinter import * 
except ImportError: 
    # for Python3 
    from tkinter import * 

Tuttavia, PEP8 ha questo da dire circa le importazioni jolly:

Wildcard imports (from <module> import *) should be avoided

Nonostante innumerevoli tutorial che ignorano PEP8, il modo in cui PEP8 conforme importare sarebbe qualcosa di simile:

import tkinter as tk 

Quando si importa in questo modo, è necessario prefixare tutti i comandi tkinter con tk. (ad esempio: root = tk.Tk(), ecc.). Questo renderà il tuo codice più facile da capire a scapito di un po 'più di digitazione. Dato che sia tkinter che ttk sono spesso usati insieme e importano classi con lo stesso nome, questa è una buona cosa. Come afferma lo Zen of python: "esplicito è meglio di implicito".

Nota: La parte as tk è facoltativo, ma permette di fare un po 'meno di battitura: tk.Button(...) vs tkinter.Button(...)

15

Il modulo si chiama tkinter, non Tkinter, a 3.x.

8

riscrivere il codice come segue con Tkinter come tkinter (minuscolo) per 3.x:

from tkinter import * 

root = Tk() 

w = Label(root, text="Hello, world!") 
w.pack() 

root.mainloop()