2017-05-07 13 views
0

私は現在、学校プロジェクト用の単純なOregon Trailクローンを作成しています。 pygameの現在のバージョンはPython 2にしか上がらず、Python 3を使用するのに慣れているので、このゲームではTkinterを使用したいと思います。ゲームのさまざまな部分を別々のpyファイルに分けました(main.py、names.py 、occupations.py、store.py、game.py)、それらをフォルダに入れて整理してください。私はすでにウェルカムスクリーンのコードと、main.py、names.pyのコードと、occupations.pyのコードを入力しました。コードを実行すると、「名前」という名前が定義されていないというエラーが表示されます。 namesファイルでは、names()という名前の関数を作成し、それをメインファイルで実行しました。私のコードで何が間違っていますか?NameError:名前 '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 

答えて

2

問題は、その後の輸入、main.py輸入はnames.pyので、あなたは、円形のインポートを持っているということですmain.py彼らはあなたが見ているような問題を引き起こすので、これらを避けるべきです。 (エラーレポートにこれらのレイヤーがすべて表示されない場合は、いくつかの部分を残しましたか?)

moduleAがmoduleBをインポートした場合、moduleBはmoduleAをインポートする必要がないようにコードを整理します。

ところで「どこからインポートしたのか」というのは、名前がどこに定義されているのか分かりにくいため、お勧めできません。

関連する問題