从变量更改标签文本

时间:2012-10-18 00:44:32

标签: python python-2.7 tkinter

我正在尝试编写一个包含25个按钮的程序,当按下一个按钮时,它将从文本文件中读取,将其存储在变量中,然后使页面底部的标签文本更改为文本文件的文本。到目前为止,这是我的代码:

from Tkinter import*
box1 = 'C:/Users/Geekman2/Documents/Tests/box1.txt'
var = StringVar()
var.set("man")
def openfile(filename):
    filetxt = (open(filename,"r").read())
   #filetxt.set(iletxt)
    print filetxt
    return filetxt

def Box1():
    openfile(box1)


openfile(box1)
donut = Tk()
donut.geometry('450x450')

cupcake = Button(donut,text = "Box #1", command= Box1 )
cupcake.pack()

Whatsin = Label(donut,textvariable = var)
Whatsin.pack(side =BOTTOM)

donut.mainloop()

这两行给我带来麻烦,每当我取消注释它们并尝试运行程序时我得到错误“AttributeError:'NoneType'对象没有属性'tk'”

var = Stringvar()
var.set("man")

谁能告诉我这可能是什么原因?我知道错误意味着什么,但据我所知,它不适用于这种情况

2 个答案:

答案 0 :(得分:3)

在使用Tk之前,您需要实例化StringVar的实例。在行之前移动donut = Tk(),它应该有效。

答案 1 :(得分:0)

StringVar(以及其他Tkinter变量)是Tcl变量 1 的包装器。 您的错误来自于在初始化Tcl解释器之前创建StringVar。

因此,您可以在创建变量之前调用Tk()(执行此类初始化)。

如果查看StringVar构造函数签名:__init__(self, master=None, value=None, name=None),您会看到其他Tkinter对象,构造函数接受master作为第一个参数。这个master主要用于访问Tcl解释器。如果未提供,则会回退到全局Tkinter.Tk实例_default_root,在您的情况下为None。在它上面询问Tcl解释器(名为tk的字段)会引发AttributeError

请注意,对于小部件,不提供主导致创建默认小部件,而不是变量。

1 整个Tkinter工具包是一个名为Tk的Tcl工具包的包装器。 Tcl变量允许跟踪,即绑定变量的回调。 Tk大量使用这种机制,因此,Tkinter必须提供对Tcl变量的访问。