使用Tkinter帮助创建Python类

时间:2010-08-13 17:25:20

标签: python class tkinter

如何创建一个名为矩形的类,我可以将坐标和颜色传递给它并填充那些?

from Tkinter import *
master = Tk()

w = Canvas(master, width=300, height=300)
w.pack()

class rectangle():

    def make(self, ulx, uly, lrx, lry, color):
        self.create_rectangle(ulx, uly, lrx, lry, fill=color)


rect1 = rectangle()
rect1.make(0,0,100,100,'blue')

mainloop()

1 个答案:

答案 0 :(得分:3)

这是一种做法。首先,要在Tk Canvas上绘制矩形,您需要调用Canvas的create_rectangle方法。我还使用__init__方法来存储矩形的属性,这样您只需要将Canvas对象作为参数传递给矩形的draw()方法。

from Tkinter import *

class Rectangle():
    def __init__(self, coords, color):
        self.coords = coords
        self.color = color

    def draw(self, canvas):
        """Draw the rectangle on a Tk Canvas."""
        canvas.create_rectangle(*self.coords, fill=self.color)

master = Tk()
w = Canvas(master, width=300, height=300)
w.pack()

rect1 = Rectangle((0, 0, 100, 100), 'blue')
rect1.draw(w)

mainloop()

修改

回答你的问题:*前面的self.coords是什么?

要在Tk Canvas上创建一个矩形,请按以下方式调用create_rectangle方法。

Canvas.create_rectangle(x0, y0, x1, y1, option, ...)

所以每个坐标(x0y0等)都是该方法的不同参数。但是,我已经将Rectangle类的coords存储在一个4元组中。我可以将这个单元组传递给方法调用,并在它前面放置一个*将它解压缩为四个独立的坐标值。

如果我有self.coords = (0, 0, 1, 1),那么create_rectangle(*self.coords)将最终为create_rectangle(0, 0, 1, 1),而不是create_rectangle((0, 0, 1, 1))。请注意第二个版本中的内部圆括号。

Python文档在unpacking argument lists中讨论了这个问题。