矩形可以用作父 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")
当我有空闲时间工作时,我会在 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")