2013-08-21 27 views
0

這是我的代碼:這是如何顯示錯誤的?

import sys 
import tkinter as tk 
import os 
mGui = tk.Tk() 
mGui.geometry("300x300") 
mGui.title("YourBowlingSpeed") 
mlabel1 = Label (text = "my label") 
mlabel1.place (x = 50,y = 150) 

我改變與*進口的我的習慣,但是,這並不工作,它表明了我的錯誤。 Traceback(最近一次調用最後一次): 文件「C:\ Python33 \ Projects \ YorBowlingSpeed-.py」,第7行,在 mlabel1 = Label(text =「mylabel」) NameError:名稱'Label'未定義

回答

2

您尚未將類Label直接導入到全局命名空間中,您只導入了該模塊。要引用它,你必須做的:

tk.Label(text = "my label") 

或者,您也可以導入類:

from tkinter import Tk, Label 

雖然我從來沒有與Tkinter的工作,我已經中常見的語法:

from tkinter import * 

其中進口每一個類,因此你不需要把tk.類名稱後面。請注意,這可能會有風險,因爲您已經有一個名爲Label的變量,它將被覆蓋。

+0

Gah,不要提到從tkinter import *'/ rant +1爲正確答案頂部:)的horrid' – Brionius

+0

因此,對於每個班級我都必須寫tk ......但爲什麼在我的代碼中我寫了mGui = tk.Tk()所以不應該是mGui ....? –

+1

正確的 - 每當你想要訪問一個tkinter名字,你需要從'tk.'開始。它需要一些工作來完成你的代碼並添加所有'tk.',但這是值得的。它避免了命名空間混亂,並且它使你的代碼更加可讀 - 如果你或者別人正在閱讀你的代碼,並且你對tkinter API不是很熟悉,那麼很容易判斷哪些引用來自tkinter。 – Brionius

2

現在你正在使用

import tkinter as tk 

您需要引用tk創建tkinter部件,所以不是

mlabel1 = Label (text = "my label") 

使用

mlabel1 = tk.Label (text = "my label") 
#   ^^^ 

高興你切換到這個模式!現在任何讀取您代碼的人都會立即知道Labeltkinter中的一項功能。它毫不含糊,易於閱讀,不會導致命名空間衝突,並且使維護代碼更容易。

+0

感謝得到它,但不能我做mGui.Label,因爲我把mGui = tk.Tk()? –

+0

Nope - 'mGui'是對'tk.Tk'對象的引用,'Label'屬於'tk',而不是'tk.Tk'。 – Brionius