Вот один из способов сделать это. Во-первых, чтобы нарисовать прямоугольник на холсте Tk, вам нужно вызвать метод create_rectangle
Canvas. Я также использую метод __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
и т. Д.) Является индивидуальными параметрами метода. Тем не менее, я сохранил координаты класса 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 обсуждает это в распаковке списков аргументов .