NameError:name' names'未定义

时间:2017-05-07 00:37:52

标签: python python-3.x tkinter

我目前正在为一个学校项目开发一个简单的Oregon Trail克隆。我想在这个游戏中使用Tkinter,因为pygame的当前版本只适用于Python 2而且我习惯使用Python 3.我将游戏的不同部分分成单独的py文件(main.py,names.py ,occupations.py,store.py,game.py)并将它们全部放入一个文件夹中,使其更有条理。我已经输入了欢迎屏幕的代码和main.py,names.py的代码,以及一些针对occupations.py的代码。当我运行我的代码时,我会看到一个错误,即名称' name'没有定义。在名称文件中,我创建了一个名为names()的函数,并在主文件中运行它。我的代码出了什么问题?

# main.py
from tkinter import *
from names import *
from occupations import *
from store import *
from game import *

root = Tk()
root.resizable(width=True, height=True)
root.wm_title('Oregon Trail')
root.geometry("200x75")

canvas = Canvas(root,width=400,height=200)
canvas.pack()

welcome = Label(canvas,
                font = ('System',14,'bold'),
                text = 'Oregon Trail')
welcome.grid(row=0,sticky=(N,S,E,W))

play = None
def playbuttoncommands():
    canvas.pack_forget()
    play.grid_forget()
    welcome.grid_forget()
    names()
play = Button(canvas,
              font = 'System',
              text = 'Travel the Trail',
              command = playbuttoncommands)
play.grid(row=1,sticky=(N,S,E,W))

root.mainloop()
# names.py
from tkinter import *
from occupations import *
from store import *
from game import *
from main import *

def names():
    canvas2 = Canvas(root,width=400,height=200)
    canvas.pack()

    root.geometry("400x200")

    namelabel = Label(root,
                      font = 'System',
                      text = 'Please enter the names of your travel group:')
    namelabel.grid(row=1,sticky=N)

    name1 = ''
    name1entry = Entry(root,textvariable=name1)
    name1entry.grid(row=2,sticky=N)

    name2 = ''
    name2entry = Entry(root,textvariable=name2)
    name2entry.grid(row=3, sticky=N)

    name3 = ''
    name3entry = Entry(root,textvariable=name3)
    name3entry.grid(row=4,sticky=N)

    name4 = ''
    name4entry = Entry(root,textvariable=name4)
    name4entry.grid(row=5,sticky=N)

    name5 = ''
    name5entry = Entry(root,textvariable=name5)
    name5entry.grid(row=6,sticky=N)

    enternames = Button(text = 'Continue', command = submitnames)
    enternames.grid(row=7,sticky=N)
# occupations.py
from tkinter import *
from names import *
from store import *
from game import *
from main import *

def submitnames():
        name1 = name1entry.get()
        name2 = name2entry.get()
        name3 = name3entry.get()
        name4 = name4entry.get()
        name5 = name5entry.get()
# Full Error Report
Exception in Tkinter callback
Traceback (most recent call last):
  File "/Library/Frameworks/Python.framework/Versions/3.5/lib/python3.5/tkinter/__init__.py", line 1550, in __call__
    return self.func(*args)
  File ***************/main.py", line 33, in playbuttoncommands
    names()
NameError: name 'names' is not defined

1 个答案:

答案 0 :(得分:2)

问题是你有一个循环导入,因为main.py导入names.py,然后导入main.py.你应该避免这些,因为它们会引起你所看到的问题。 (错误报告没有显示所有这些图层,您是否留下了一些?)

组织你的代码,这样如果moduleA导入moduleB,那么moduleB不需要导入moduleA。

不鼓励BTW:“来自xyz import *”,因为它很难看到名称的定义。