如何解决python2.7中的名称错误
当我在python3中运行Python脚本时,它工作得很好,但在Python2.7中我遇到了一个错误,我应该在Python2.7中运行以下代码: 这是我的代码:我想测试一些路径查找算法,并想创建一个由网格组成的窗口,我可以在单击时拖动鼠标来创建墙,然后通过右键单击并拖动来删除它们如何解决python2.7中的名称错误,python,python-2.7,tkinter,Python,Python 2.7,Tkinter,当我在python3中运行Python脚本时,它工作得很好,但在Python2.7中我遇到了一个错误,我应该在Python2.7中运行以下代码: 这是我的代码:我想测试一些路径查找算法,并想创建一个由网格组成的窗口,我可以在单击时拖动鼠标来创建墙,然后通过右键单击并拖动来删除它们 import Tkinter class Cell(): FILLED_COLOR_BG = "green" EMPTY_COLOR_BG = "white" FILLED_COLOR_BOR
import Tkinter
class Cell():
FILLED_COLOR_BG = "green"
EMPTY_COLOR_BG = "white"
FILLED_COLOR_BORDER = "green"
EMPTY_COLOR_BORDER = "black"
def __init__(self, master, x, y, size):
""" Constructor of the object called by Cell(...) """
self.master = master
self.abs = x
self.ord = y
self.size= size
self.fill= False
def _switch(self):
""" Switch if the cell is filled or not. """
self.fill= not self.fill
def draw(self):
""" order to the cell to draw its representation on the canvas """
if self.master != None :
fill = Cell.FILLED_COLOR_BG
outline = Cell.FILLED_COLOR_BORDER
if not self.fill:
fill = Cell.EMPTY_COLOR_BG
outline = Cell.EMPTY_COLOR_BORDER
xmin = self.abs * self.size
xmax = xmin + self.size
ymin = self.ord * self.size
ymax = ymin + self.size
self.master.create_rectangle(xmin, ymin, xmax, ymax, fill = fill, outline = outline)
class CellGrid(Canvas):
def __init__(self,master, rowNumber, columnNumber, cellSize, *args, **kwargs):
Canvas.__init__(self, master, width = cellSize * columnNumber , height = cellSize * rowNumber, *args, **kwargs)
self.cellSize = cellSize
self.grid = []
for row in range(rowNumber):
line = []
for column in range(columnNumber):
line.append(Cell(self, column, row, cellSize))
self.grid.append(line)
#memorize the cells that have been modified to avoid many switching of state during mouse motion.
self.switched = []
#bind click action
self.bind("<Button-1>", self.handleMouseClick)
#bind moving while clicking
self.bind("<B1-Motion>", self.handleMouseMotion)
#bind release button action - clear the memory of midified cells.
self.bind("<ButtonRelease-1>", lambda event: self.switched.clear())
self.draw()
def draw(self):
for row in self.grid:
for cell in row:
cell.draw()
def _eventCoords(self, event):
row = int(event.y / self.cellSize)
column = int(event.x / self.cellSize)
return row, column
def handleMouseClick(self, event):
row, column = self._eventCoords(event)
cell = self.grid[row][column]
cell._switch()
cell.draw()
#add the cell to the list of cell switched during the click
self.switched.append(cell)
def handleMouseMotion(self, event):
row, column = self._eventCoords(event)
cell = self.grid[row][column]
if cell not in self.switched:
cell._switch()
cell.draw()
self.switched.append(cell)
if __name__ == "__main__" :
app = Tk()
grid = CellGrid(app, 50, 50, 10)
grid.pack()
app.mainloop()
为了在Python2.7中运行它,我如何更改代码?好吧,它没有定义好,我想知道它如何在Py3上运行,除非Tkinter以某种方式将Canvas转储到您的命名空间中
您可能想做
类CellGrid(Tkinter.Canvas)
,但我不记得Tkinter的确切结构,所以它可能在子包或其他东西中。您需要导入要使用的模块元素,在您的情况下:
from Tkinter import Canvas, Tk
您还可以执行以下操作:
from Tkinter import *
但这不是推荐的做法。若您使用了许多模块,并且其中两个模块恰好具有相同的方法名称,那个么您的代码可能无法正常工作
最后一条路就是
import Tkinker
但每次使用这个模块的元素时,都需要添加完整路径,所以如果要使用Canvas
,就需要使用Tkinker.Canvas
还要记住,在Python2.7中导入Tkinter和在3.X中导入Tkinter非常感谢。这有助于:)
import Tkinker