我正在尝试编写一个包含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")
谁能告诉我这可能是什么原因?我知道错误意味着什么,但据我所知,它不适用于这种情况
答案 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变量的访问。