2013-08-21 26 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