我试图产生一个星算法使用Tkinter二维图形用户界面。我修改了以下代码,原来是在这里找到的:
from tkinter import *
class CellGrid(Canvas):
def __init__(self,master, rowNumber, columnNumber, cellSize, theMap):
Canvas.__init__(self, master, width = cellSize * columnNumber , height = cellSize * rowNumber)
self.cellSize = cellSize
self.grid = []
for row in range(rowNumber):
line = []
for column in range(columnNumber):
line.append(Cell(self, column, row, cellSize, theMap[row][column]))
self.grid.append(line)
print (self.grid[0][0].value)
self.draw()
def draw(self):
for row in self.grid:
for cell in row:
cell.draw()
class Cell():
colors = {
0: 'white', # untried
1: 'black', # obstacle
2: 'green', # start
3: 'red', # finish
4: 'blue', # open
5: 'gray', # closed
6: 'orange', # path
}
def __init__(self, master, x, y, size, value):
self.master = master
self.abs = x
self.ord = y
self.size= size
self.fill = "white"
self.value = value
def setValue(self, value):
self.value = value
def draw(self):
if self.master != None :
if self.value == 0:
self.fill = self.white
elif self.value == 1:
self.fill = self.black
elif self.value == 2:
self.fill = self.green
elif self.value == 3:
self.fill = self.red
elif self.value == 4:
self.fill = self.blue
elif self.value == 5:
self.fill = self.gray
elif self.value == 6:
self.fill = self.orange
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 = self.fill, outline = "black")
def main():
Map = [
[2, 0, 0, 0, 0],
[0, 1, 1, 1, 1],
[0, 1, 3, 0, 0],
[0, 1, 1, 1, 0],
[0, 0, 0, 0, 0],
]
root = Tk()
c = tk.Canvas(root, height=1000, width=1000, bg='white')
my_gui = CellGrid(root, len(Map), len(Map[0]), 40, Map)
root.mainloop()
但当我去运行它时,什么都没有显示。你知道吗
许多小的和不小的误解阻碍了星型算法的显示。你知道吗
问题1-调用
main()
函数不完整。你知道吗只需在
def main()
函数后添加以下代码:问题2-主
Canvas
显示器输入错误和pack()
丢失。你知道吗因为
tk
符号没有定义,所以主画布声明如下:而不是:
在神奇的缺失调用之后是
pack()
:问题3-缺少对辅助
Canvas
显示的调用。你知道吗至于主
Canvas
,它缺少pack()
的调用,可以使用两种可能性来显示次Canvas
。你知道吗my_gui.pack()
使主Canvas
与次Canvas
的大小相匹配my_gui.place(relx=0.5, rely=0.5, anchor=CENTER)
使次要的Canvas
居中于主要的Canvas
。你知道吗要显示辅助
Canvas
,请执行以下操作:问题4-在
Cell::draw()
函数中对词典使用的误解。你知道吗第一个单元格的值
self.grid[0][0].value = 2
,绘制单元格时,下面的self.fill = self.green
生成错误。你知道吗有三种可能性可以用来解决这个错误:
self.fill = '<color>'
替换self.fill = self.<color>
(7例)colors
,并用唯一的调用替换这7个case。你知道吗字典的用法可以是(sol 2):
而不是长if elif(sol 1):
相关问题 更多 >
编程相关推荐