2011-09-21 40 views
18

Tôi đang thử kiểm tra mã GUI bằng Python 3.2 với Tkinter thư viện chuẩn nhưng tôi không thể nhập thư viện.ImportError khi nhập Tkinter bằng Python

Đây là mã thử nghiệm của tôi:

from Tkinter import * 

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

Báo cáo vỏ lỗi này:

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

Trả lời

27

Các gốc rễ của vấn đề là các mô-đun Tkinter được đặt tên Tkinter (vốn "T") trong python 2 .x và tkinter (chữ thường "t") trong python 3.x.

Để làm cho công việc mã của bạn trong cả Python 2 và 3 bạn có thể làm một cái gì đó như thế này:

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

Tuy nhiên, PEP8 có này để nói về ký tự đại diện nhập khẩu:

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

Mặc dù vô số hướng dẫn bỏ qua PEP8, cách tương thích PEP8 để nhập sẽ là một cái gì đó như thế này:

import tkinter as tk 

Khi nhập theo cách này, bạn cần đặt trước tất cả các lệnh tkinter với tk. (ví dụ: root = tk.Tk(), v.v.). Điều này sẽ làm cho mã của bạn dễ hiểu hơn với chi phí cho việc gõ nhiều hơn một chút. Cho rằng cả tkinter và ttk thường được sử dụng cùng nhau và nhập các lớp có cùng tên, đây là một điều tốt. Như các trạng thái Zen of python: "rõ ràng là tốt hơn so với ngầm".

Lưu ý: Phần as tk là không bắt buộc, nhưng cho phép bạn làm một chút ít gõ: tk.Button(...) vs tkinter.Button(...)

15

Module này được gọi là tkinter, không Tkinter, trong 3.x.

8

Viết lại đoạn code như sau với Tkinter như tkinter (chữ thường) cho 3.x:

from tkinter import * 

root = Tk() 

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

root.mainloop() 
Các vấn đề liên quan