2010-08-13 1 views
0

Как создать класс с названием rectangle, который я могу передать ему координаты и цвет, и заполнить их?Помощь Создание класса Python с 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() 

ответ

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

EDIT

Отвечая на ваш вопрос: что находится перед self.coords*?

Чтобы создать прямоугольник на холсте Tk, вы вызываете метод create_rectangle следующим образом.

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

Таким образом, каждый из (x0 координат, y0 и т.д.) является 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 делать? –

 Смежные вопросы

  • Нет связанных вопросов^_^