[英]Why am I getting this error “NameError:name 'self' is not defined.”
[英]When I ran this code in Python3 it gives this error: NameError: name 'x' is not defined. How do I correct this?
from tkinter import *
def callback(r,c):
global player
if player == ' X ' and states[x][y] == 0 and stop_game==False:
b[r][c].configure(text= ' X ' , fg= ' blue ' , bg= ' white ' )
states[r][c] = ' X '
player = ' O '
if player == ' O ' and states[r][c] == 0 and stop_game==False:
b[r][c].configure(text= ' O ' , fg= ' orange ' , bg= ' black ' )
states[r][c] = ' O '
player = ' X '
check_for_winner()
def check_for_winner():
global stop_game
for i in range(3):
if states[i][0]==states[i][1]==states[i][2]!=0:
b[i][0].configure(bg= ' grey ' )
b[i][1].configure(bg= ' grey ' )
b[i][2].configure(bg= ' grey ' )
stop_game = True
for i in range(3):
if states[0][i]==states[1][i]==states[2][i]!=0:
b[0][i].configure(bg= ' grey ' )
b[1][i].configure(bg= ' grey ' )
b[2][i].configure(bg= ' grey ' )
stop_game = True
if states[0][0]==states[1][1]==states[2][2]!=0:
b[0][0].configure(bg= ' grey ' )
b[1][1].configure(bg= ' grey ' )
b[2][2].configure(bg= ' grey ' )
stop_game = True
if states[2][0]==states[1][1]==states[0][2]!=0:
b[2][0].configure(bg= ' grey ' )
b[1][1].configure(bg= ' grey ' )
b[0][2].configure(bg= ' grey ' )
stop_game = True
root = Tk()
b = [[0,0,0],
[0,0,0],
[0,0,0]]
states = [[0,0,0],
[0,0,0],
[0,0,0]]
for i in range(3):
for j in range(3):
b[i][j] = Button(font=( ' Verdana ' , 56), width=3, bg= 'yellow' , command = lambda r=i,c=j: callback(r,c))
b[i][j].grid(row = i, column = j)
player = ' X '
stop_game = False
mainloop()
当我运行代码时,它给出了这个错误:
Exception in Tkinter callback
Traceback (most recent call last):
File "/usr/lib/python3.6/tkinter/__init__.py", line 1705, in __call__
return self.func(*args)
File "./tic_tac_toe_gui3.py", line 58, in <lambda>
b[i][j] = Button(font=( ' Verdana ' , 56), width=3, bg= 'yellow' , command = lambda r=i,c=j: callback(r,c))
File "./tic_tac_toe_gui3.py", line 7, in callback
if player == ' X ' and states[k][y] == 0 and stop_game==False:
NameError: name 'x' is not defined
我尝试为x
和y
声明一个值,但是它给出了这个错误:
Exception in Tkinter callback
Traceback (most recent call last):
File "/usr/lib/python3.6/tkinter/__init__.py", line 1705, in __call__
return self.func(*args)
File "./tic_tac_toe_gui3.py", line 60, in <lambda>
b[i][j] = Button(font=( ' Verdana ' , 56), width=3, bg= 'yellow' , command = lambda r=i,c=j: callback(r,c))
File "./tic_tac_toe_gui3.py", line 10, in callback
b[r][c].configure(text= ' X ' , fg= ' blue ' , bg= ' white ' )
File "/usr/lib/python3.6/tkinter/__init__.py", line 1485, in configure
return self._configure('configure', cnf, kw)
File "/usr/lib/python3.6/tkinter/__init__.py", line 1476, in _configure
self.tk.call(_flatten((self._w, cmd)) + self._options(cnf))
_tkinter.TclError: unknown color name " blue "
我需要做些什么来更正此代码以使其正常运行并能够运行?
NameError 是由于未声明变量x,y
,然后tkinter.TclError
是由于您添加到 colors 的空格,只需删除代码中所有unwanted spaces
from tkinter import *
def callback(r,c):
global player
x,y = some_value,some_value
if player == 'X' and states[x][y] == 0 and stop_game==False:
b[r][c].configure(text= 'X' , fg= 'blue' , bg= 'white' )
states[r][c] = ' X '
player = ' O '
if player == ' O ' and states[r][c] == 0 and stop_game==False:
b[r][c].configure(text= 'O' , fg= 'orange' , bg= 'black' )
states[r][c] = 'O'
player = 'X'
check_for_winner()
def check_for_winner():
global stop_game
for i in range(3):
if states[i][0]==states[i][1]==states[i][2]!=0:
b[i][0].configure(bg= 'grey' )
b[i][1].configure(bg= 'grey' )
b[i][2].configure(bg= 'grey' )
stop_game = True
for i in range(3):
if states[0][i]==states[1][i]==states[2][i]!=0:
b[0][i].configure(bg= 'grey' )
b[1][i].configure(bg= 'grey' )
b[2][i].configure(bg= 'grey' )
stop_game = True
if states[0][0]==states[1][1]==states[2][2]!=0:
b[0][0].configure(bg= 'grey' )
b[1][1].configure(bg= 'grey' )
b[2][2].configure(bg= 'grey' )
stop_game = True
if states[2][0]==states[1][1]==states[0][2]!=0:
b[2][0].configure(bg= 'grey' )
b[1][1].configure(bg= 'grey' )
b[0][2].configure(bg= 'grey' )
stop_game = True
root = Tk()
b = [[0,0,0],
[0,0,0],
[0,0,0]]
states = [[0,0,0],
[0,0,0],
[0,0,0]]
for i in range(3):
for j in range(3):
b[i][j] = Button(font=( 'Verdana' , 56), width=3, bg= 'yellow' , command = lambda r=i,c=j: callback(r,c))
b[i][j].grid(row = i, column = j)
player = 'X'
stop_game = False
mainloop()
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.