【问题标题】:Python canvas doesn't draw multiple linesPython画布不会画多条线
【发布时间】:2019-07-27 03:54:01
【问题描述】:

我正在创建 2D 游戏,当我尝试添加多个墙时,它们不会出现在画布上。

import tkinter

root = tkinter.Tk()
canvas = tkinter.Canvas(root)
canvas.pack()

class wall:
  point1 = []
  point2 = []
  def __init__(self, canvas, x1, y1, x2, y2):
    self.canvas = canvas
    self.point1.append(x1)
    self.point1.append(y1)
    self.point2.append(x2)
    self.point2.append(y2)
  def draw(self):
    self.canvas.create_line(self.point1[0], self.point1[1], self.point2[0], self.point2[1], width = 2)

walls = []
walls.append(wall(canvas, 90, 90, 100, 200))
walls.append(wall(canvas, 90, 90, 300, 100))

def update():
    for wall in walls:
        wall.draw()
    root.after(int(1000/60), update)
root.after(int(1000/60), update)
root.mainloop()

如果我手动添加它们,它们会同时绘制。

canvas.create_line(90, 90, 100, 200, width = 2)
canvas.create_line(90, 90, 300, 100, width = 2)

【问题讨论】:

  • 将其保留为self.x1self.y1self.x2self.y2 再简单不过了?

标签: python python-3.x canvas tkinter tkinter-canvas


【解决方案1】:

考虑这部分课程wall

class wall:
    point1 = []
    point2 = []
    ...

列表point1point2 被定义为类属性而不是实例属性。因此,当您添加新坐标时,之前的坐标仍然存在。

要解决此问题,只需创建 pointpoint2 实例属性即可:

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)

【讨论】:

    【解决方案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)
    

    【讨论】:

    • 描述一下。没有解释的代码就没那么有用了——即使它可能是个好主意。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-01-09
    • 1970-01-01
    • 2018-12-14
    • 1970-01-01
    相关资源
    最近更新 更多