我在尝试使用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时,它可以工作。
你可以帮我解决这个问题吗?感谢答案 0 :(得分:4)
Python在明确说明变量的位置方面很重要。您可能希望将name_entry
作为实例变量。为此,请将name_entry
的所有实例替换为self.name_entry
。 self
引用当前对象,并且您希望将该对象保存在那里。否则,它只是一个局部变量。