ImportError при импорте Tkinter в Python

Я пытаюсь протестировать GUI-код с помощью Python 3.2 со стандартной библиотекой Tkinter, но я не могу импортировать библиотеку.

Это мой тестовый код:

from Tkinter import *

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

Оболочка сообщает об этой ошибке:

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

Ответ 1

Корень проблемы состоит в том, что модуль Tkinter имеет имя Tkinter (capital "T" ) в python 2.x и Tkinter (нижний регистр "t" ) в python 3.x.

Чтобы заставить ваш код работать как на Python 2, так и на 3, вы можете сделать что-то вроде этого:

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

Однако PEP8 говорит об импорте:

Следует избегать импорта подстановочных знаков (из <module> import *)

Несмотря на бесчисленное количество обучающих программ, которые игнорируют PEP8, способ импорта, совместимый с PEP8, будет примерно таким:

import tkinter as tk

При импорте таким образом вам нужно префикс всех команд tkinter с помощью tk. (например: root = tk.Tk() и т.д.). Это сделает ваш код более понятным за счет крошечного набора текста. Учитывая, что как tkinter, так и ttk часто используются вместе и импортируют классы с тем же именем, это хорошая вещь. Поскольку Zen of python говорит: "Явное лучше, чем неявное".

Примечание. Часть as tk является необязательной, но позволяет немного набирать текст: tk.Button(...) vs tkinter.Button(...)

Ответ 2

Модуль называется tkinter, а не tkinter, в 3.x.

Ответ 3

Перепишите код следующим образом Tkinter как Tkinter (строчный) для 3.x:

from tkinter import *

root = Tk()

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

root.mainloop()