web-dev-qa-db-ja.com

TkinterをPython

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
19
Carry All

問題の根源は、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(...)

31
Ben Gates

モジュールは、3.xではtkinterではなくTkinterと呼ばれます。

16
Cat Plus Plus

3.xの場合、Tkintertkinter(小文字)として次のようにコードを書き換えます。

from tkinter import *

root = Tk()

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

root.mainloop()
9
Musaab