【发布时间】:2017-01-01 05:01:25
【问题描述】:
所以我正在制作一个游戏,我正在使用 Tkinter 和 Python 2.7,我想将地图数据存储在文件中。我正在尝试制作一个菜单来打开文件并设置为变量。我在定义要在 Tkinter 按钮上使用的函数时遇到问题。
Tkinter 窗口打开,但当我单击按钮时出现错误。
代码:
#readfiles.py
class maps(object):
def __init__(self):
self.data
def mapset(var):
data = var
fselect = Tk()
...
buttons = Frame(fselect).pack()
Label(fselect, text="Select maps in folder:")
for i in listdir('./maps/'):
if i[-4:] == ".pvm":
Button(buttons, text=i[:-4], command=lambda i=i: mapset(open('./maps/'+i, 'r').read())).pack()
NameError: global name 'mapset' is not defined
另外,我如何在另一个文件中访问maps 中的data 变量(所以应该是maps.data,对)?
#main.py
from readfiles import *
print maps.data
AttributeError: type object 'maps' has no attribute 'data'
如果您需要任何其他信息,请告诉我。
另外,print "Happy New Years!
【问题讨论】:
-
你的缩进是否正确?
mapset是maps的属性吗? -
看起来像
def mapset(var):,它的主体需要再次缩进 -
您永远不会调用
maps()函数来创建对象。而self.data应该是self.data = something。 -
您发布的代码存在多个问题。正如 Barmar 所提到的,您永远不会创建
maps实例,并且maps.__init__方法没有意义。mapset应该做什么?它应该是maps的方法吗?此外,widget.pack和.grid方法返回None,因此buttons = Frame(fselect).pack()将buttons设置为None。你忘了.pack那个Label小部件。 -
你指的是哪个“变量
data”?没有这样的变量。data是您似乎希望在maps类中拥有的属性的名称,但您从未真正创建该类的实例,或正确地为变量分配任何内容。我认为您的 TK 代码不是您遇到的主要问题。相反,它掩盖了您对基本 OOP 概念的困惑。尝试阅读the Python tutorial's chapter on classes,然后看看是否可以解决。
标签: python python-2.7 tkinter