Python 3.2を標準ライブラリTkinterで使用してGUIコードをテストしようとしていますが、ライブラリをインポートできません。
これは私のテストコードです。
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
問題の根源は、Tkinterモジュールの名前がTkinter
(大文字の「T」)でpython 2.x、およびtkinter
(小文字の「t」) ")in 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(...)
モジュールは、3.xではtkinter
ではなくTkinter
と呼ばれます。
3.xの場合、Tkinter
をtkinter
(小文字)として次のようにコードを書き換えます。
from tkinter import *
root = Tk()
w = Label(root, text="Hello, world!")
w.pack()
root.mainloop()