NameError:name [...]未在类

时间:2016-01-13 19:19:23

标签: python class tkinter

我在尝试使用tkinter中的条目小部件时遇到错误(需要为TicTacToe获取玩家的名字)
我创建了一个类Player:

class Player:
""" Informations sur les joueurs """
def __init__(self):
    self.name = ""
    self.score = 0
    self.active = 0

def get_name(self, main_window):

    name_selection_window = Toplevel()
    name_selection_window.resizable(0,0)
    name_selection_window.wait_visibility()
    name_selection_window.grab_set()
    name_selection_window.transient(main_window)
    name_selection_window.focus_force()

    player_name_label = Label(name_selection_window, text="Nom du Joueur 1 : ")
    player_name_label.pack()    

    name_entry = Entry(name_selection_window, bd=3)
    name_entry.bind("<Return>",self.entry_master)
    name_entry.pack()

    main_window.wait_window(name_selection_window)

def entry_master(self, event):
    """Récupère l'entrée pour chaque joueur."""    
    name = name_entry.get()
    if name != "":
        self.name = name
    name_selection_window.destroy()
    pass

(我无法在这个编辑器中得到正确的填充,我不知道为什么,对不起这个)
代码的每个其他部分都有效,当我启动它时,会弹出一个窗口并要求输入名称。但是当我按下ENTER来验证条目时

Exception in Tkinter callback
Traceback (most recent call last):
  File "c:\miniconda3\lib\tkinter\__init__.py", line 1549, in __call__
    return self.func(*args)
  File "N:\ISN\tictactoe\jeu_v2.py", line 32, in entry_master
    name = name_entry.get()
NameError: name 'name_entry' is not defined

我不明白为什么,因为name_entry是在get_name()中定义的。当我在类之外使用get_name和entry_master时,它可以工作。

你可以帮我解决这个问题吗?感谢

1 个答案:

答案 0 :(得分:4)

Python在明确说明变量的位置方面很重要。您可能希望将name_entry作为实例变量。为此,请将name_entry的所有实例替换为self.name_entryself引用当前对象,并且您希望将该对象保存在那里。否则,它只是一个局部变量。