2011-09-21 50 views
18

Estoy tratando de probar el código GUI usando Python 3.2 con la biblioteca estándar Tkinter pero no puedo importar la biblioteca.ImportError al importar Tkinter en Python

Este es mi código de prueba:

from Tkinter import * 

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

Los informes de concha este error:

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

Respuesta

27

La raíz del problema es que el módulo se llama Tkinter Tkinter ("T" mayúscula) en Python 2 .x y tkinter (minúscula "t") en python 3.x.

Para que su código funcione tanto en Python 2 y 3 se puede hacer algo como esto:

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

Sin embargo, PEP8 tiene esto que decir sobre las importaciones comodín:

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

A pesar de innumerables tutoriales que ignoran PEP8, la forma de importar PEP8 sería algo como esto:

import tkinter as tk 

Al importar de esta manera, debe marcar previamente todos los comandos de tkinter con tk. (p. Ej .: root = tk.Tk(), etc.). Esto hará que su código sea más fácil de entender a expensas de un poco más de tipeo. Dado que tanto tkinter como ttk a menudo se usan juntos e importan clases con el mismo nombre, esto es una buena cosa. Como dice Zen of python: "explícito es mejor que implícito".

Nota: La parte as tk es opcional, pero le permite hacer un poco menos escribiendo: tk.Button(...) vs tkinter.Button(...)

15

El módulo se llama tkinter, no Tkinter, en 3.x.

8

reescribir el código de la siguiente manera con Tkinter como tkinter (en minúsculas) para 3.x:

from tkinter import * 

root = Tk() 

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

root.mainloop() 
Cuestiones relacionadas