Помогите создать класс Python с Tkinter - PullRequest
0 голосов
/ 13 августа 2010

Как мне создать класс под названием прямоугольник, чтобы я мог передать ему координаты и цвет, чтобы он заполнил их?

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 Ответ

3 голосов
/ 13 августа 2010

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...