Python画布不';不要画多条线

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

我正在创建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)
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
,非常容易。请描述它。没有解释的代码用处不大——即使它可能是个好主意。