2010-08-13 46 views
0

如何創建一個名爲矩形的類,我可以將它傳遞給座標和顏色並填充它們?幫助用Tkinter創建Python類

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() 

回答

3

這是一種方法。首先,要在Tk畫布上繪製矩形,您需要調用畫布的create_rectangle方法。我還使用__init__方法來存儲矩形的屬性,以便您只需將畫布對象作爲參數傳遞給矩形的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畫布上創建矩形,請按以下方式調用create_rectangle方法。

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

所以每個COORDS(x0y0等)是indiviual PARAMATERS給方法。但是,我將Rectangle類的座標存儲在一個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中對此進行了討論。

+0

self.coords前的'*'是什麼? – 2010-08-13 17:58:14