Python画布不';不要画多条线
我正在创建2D游戏,当我尝试添加多个墙时,它们不会出现在画布上Python画布不';不要画多条线,python,python-3.x,canvas,tkinter,tkinter-canvas,Python,Python 3.x,Canvas,Tkinter,Tkinter Canvas,我正在创建2D游戏,当我尝试添加多个墙时,它们不会出现在画布上 导入tkinter root=tkinter.Tk() canvas=tkinter.canvas(根) canvas.pack() 类墙: 点1=[] 点2=[] 定义初始化(自我,画布,x1,y1,x2,y2): self.canvas=画布 self.point1.append(x1) self.point1.append(y1) self.point2.append(x2) self.point2.append(y2) de
导入tkinter
root=tkinter.Tk()
canvas=tkinter.canvas(根)
canvas.pack()
类墙:
点1=[]
点2=[]
定义初始化(自我,画布,x1,y1,x2,y2):
self.canvas=画布
self.point1.append(x1)
self.point1.append(y1)
self.point2.append(x2)
self.point2.append(y2)
def牵引(自):
self.canvas.create_line(self.point1[0],self.point1[1],self.point2[0],self.point2[1],width=2)
墙=[]
附加(墙(画布,90,90,100,200))
附加(墙(画布,90,90,300,100))
def update():
对于墙中墙:
墙上画()
root.after(int(1000/60),更新)
root.after(int(1000/60),更新)
root.mainloop()
如果我手动添加它们,它们将同时绘制
canvas.创建线(90,90,100,200,宽度=2)
画布。创建线(90,90,300,100,宽度=2)
使用实例属性而不是类属性
class wall:
def __init__(self, canvas, x1, y1, x2, y2):
self.canvas = canvas
self.x1 = x1
self.y1 = y1
self.x2 = x2
self.y2 = y2
def draw(self):
self.canvas.create_line(self.x1, self.y1, self.x2, self.y2, width=2)
考虑一下课堂的这一部分
wall
:
class wall:
point1 = []
point2 = []
...
列表point1
和point2
被定义为类属性而不是实例属性。因此,当您附加新坐标时,以前的坐标仍然存在
要解决此问题,只需创建point
和point2
实例属性即可:
class wall:
def __init__(self, canvas, x1, y1, x2, y2):
self.point1 = []
self.point2 = []
...
或直接使用参数:
class wall:
def __init__(self, canvas, x1, y1, x2, y2):
self.canvas = canvas
self.x1 = x1
self.y1 = y1
self.x2 = x2
self.y2 = y2
def draw(self):
self.canvas.create_line(self.x1, self.y1, self.x2, self.y2, width = 2)
将其保存为
self.x1
,self.y1
,self.x2
,self.y2
,非常容易。请描述它。没有解释的代码用处不大——即使它可能是个好主意。