类中定义的Python调用函数
所以我正在制作一个游戏,我正在使用Tkinter和Python2.7,我想将地图数据存储在文件中。我试图制作一个菜单来打开文件并设置为一个变量。我在定义Tkinter按钮上使用的函数时遇到问题 Tkinter窗口将打开,但当我单击按钮时,它会显示一个错误 代码:类中定义的Python调用函数,python,python-2.7,tkinter,Python,Python 2.7,Tkinter,所以我正在制作一个游戏,我正在使用Tkinter和Python2.7,我想将地图数据存储在文件中。我试图制作一个菜单来打开文件并设置为一个变量。我在定义Tkinter按钮上使用的函数时遇到问题 Tkinter窗口将打开,但当我单击按钮时,它会显示一个错误 代码: name错误:未定义全局名称“mapset” 另外,如何访问另一个文件中的映射中的数据变量(因此它将是映射.数据,右侧) #main.py from readfiles import * print maps.data Attrib
name错误:未定义全局名称“mapset”
另外,如何访问另一个文件中的映射
中的数据
变量(因此它将是映射.数据
,右侧)
#main.py
from readfiles import *
print maps.data
AttributeError:type对象“maps”没有属性“data”
如果您需要任何其他信息,请告诉我。
另外,
print“新年快乐!”
这里有一个简单的GUI类,它将地图文件中的数据存储在self.data
属性中
为了测试这段代码,我使用这个Bash命令创建了一组简单的文本文件:
用于{0..5}中的i;do echo>“maps/map${i}.pvm”“map$i data”;完成
这是Python3代码。要在Python2上运行它,只需将Tkinter导入语句更改为import Tkinter as tk
,并在其他导入语句之前添加from\uuuuuuuu future\uuuuuuuu import print\u函数
我添加了一个“打印数据”
,让我们可以测试我们是否正确加载了数据
将tkinter作为tk导入
导入操作系统
类Gui(对象):
定义初始化(self,mapspath):
self.data=None
root=tk.tk()
frame=tk.frame(根)
frame.pack()
标签(frame,text=“选择文件夹中的地图:”).pack()
对于os.listdir(mapspath)中的fbase:
如果fbase.endswith('.pvm'):
fname=os.path.join(mapspath,fbase)
#打印(fname)
按钮(框架,文本=fbase[:-4],
command=lambda fn=fname:self.read_map(fn)).pack()
按钮(frame,text=“Print data”,command=self.Print\u map).pack()
root.mainloop()
def read_映射(自身,fname):
将open(fname)作为f:
self.data=f.read()
def打印地图(自我):
打印(“当前地图:”,self.data)
图形用户界面(“地图”)
除非这些地图很大,否则一次存储所有地图可能会更方便。您可以将它们存储在列表中,但最好使用基本名称(减去'.pvm'
扩展名)将它们存储在字典中作为键。缩进正确吗?mapset
是maps
的属性吗?看起来像def mapset(var):
并且它的主体需要再次缩进一次您永远不会调用maps()
函数创建一个对象。而self.data
应该是self.data=something
。您发布的代码存在多个问题。正如Barmar提到的,您从未创建maps
实例,而maps.\uuu init\uuuuu
方法没有意义。mapset
应该做什么?它支持吗另外,widget.pack
和.grid
方法返回None
,因此buttons=Frame(fselect).pack()
将按钮设置为None
,而您忘记了.pack
标签widget.Which“变量数据“你指的是什么?没有这样的变量data
是您似乎希望在maps
类中拥有的属性的名称,但您从未实际创建该类的实例,也没有为变量正确分配任何内容。我认为你的TK代码不是你遇到的主要问题。相反,它掩盖了您对OOP基本概念的困惑。试着读一遍,然后看看你是否能把它整理出来。
#main.py
from readfiles import *
print maps.data