0

我正在尝试编写一个有 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")

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

4

2 回答 2

3

您需要先实例化 的实例,Tk然后才能使用StringVar. donut = Tk()在你的线路之前移动,它应该可以工作。

于 2012-10-18T00:49:53.863 回答
0

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

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

如果您查看 StringVar 构造函数签名:__init__(self, master=None, value=None, name=None)您会看到与其他 Tkinter 对象一样,构造函数接受 amaster作为第一个参数。这个 master 本质上是访问 Tcl 解释器所必需的。如果未提供,则会回退到全局Tkinter.Tk实例_default_root,这就是None您的情况。询问 Tcl 解释器(名为 的字段tk)会引发AttributeError.

请注意,对于小部件,不提供 master 会导致创建默认值,但不会创建变量。

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

于 2012-10-18T10:04:29.867 回答