矩形可以用作父 class (tkinter) 吗?

Can rectangle be used as a parent class (tkinter)?

当我有空闲时间工作时,我会在 python (2.6) 上闲逛,我想我会尝试创建一个 game of life。为此,我想为不同的单元格制作一个 class,它会像矩形一样绘制在 canvas 上,但会有更多属性,例如它们是活的还是死的等。

我看到 tkinter 库中的 canvas 模块有一个矩形 class,但它说这个模块已过时,而在 tkinter 模块本身中,我只能找到一个函数关于矩形

我是不是遗漏了什么...是否可以使用矩形作为父对象 class...(也许我在尝试制作 [=21 的单元格实例时完全错了=]; 作为一个我才刚刚开始接触编程的人,我想尝试让它成为那样的体验)

没有可以用作父级 class 的矩形 class。但是,您可以创建自己的 class 来表示一个仅需几行代码的矩形。

例如:

class Rectangle(object):
    def __init__(self, canvas, coords, fill, outline=None):
        self.canvas = canvas
        self.outline = outline if outline is not None else fill
        self.fill = fill
        self.canvas_id = self.canvas.create_rectangle(
            coords, outline=self.outline, fill=self.fill)

你可以这样使用它:

canvas = tk.Canvas(...)
r1 = Rectangle(canvas, (50,50, 150, 150), "red")
r2 = Rectangle(canvas, (100, 50, 150, 150), "green")
...

然后您可以创建一个名为 Cell 的子class,它采用行和列而不是实际的 x/y 坐标,并且有一个方法 set_state 可以更改颜色:

class Cell(Rectangle):
    def __init__(self, canvas, row, column):
        # make a 50x50 rectangle in the given row, column
        x0 = column * 50
        y0 = row * 50
        x1 = x0 + 50
        y1 = y0 + 50
        self.state = None
        super(Cell, self).__init__(canvas, (x0, y0, x1, y1), "gray")

    def set_state(self, state):
        self.state = state
        color = "green" if state == "alive" else "red"
        self.canvas.itemconfigure(self.canvas_id, fill=color, outline=color)

你会这样使用它:

# place a cell at row zero, column zero, and
# set its state to "alive"
cell = Cell(canvas, 0, 0)
cell.set_state("alive")