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

时间:2015-04-22 14:07:20

标签: python tkinter

当我有空闲时间工作时,我正在使用python(2.6),我想我会尝试创建一个game of life。为了这个目的,我想为不同的单元格创建一个类,它将在画布上绘制,就像矩形一样,但会有更多的属性,比如它们是活着的还是死的等等。

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

我错过了什么......是否有可能使用矩形作为父类......(也许我在尝试制作类的单元格实例时完全错误;仍然只是我只是开始进入编程我想尝试使它像经验那样)

1 个答案:

答案 0 :(得分:1)

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

例如:

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的子类,它取一行和一列而不是实际的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")