Основы Python - как сделать функцию 'class ('?) Для простого набора математических переменных - PullRequest
0 голосов
/ 17 февраля 2012

Я пытаюсь написать базовый виджет для рисования, используя библиотеку Tkinter.

Самый базовый код, который я сейчас использую:

from Tkinter import *
master = Tk()
w = Canvas(master, width=1200, height=800)
w_centre = 600
h_centre = 400
w.pack()
w.create_oval(w_centre-50, h_centre-50, w_centre+50, h_centre+50)
mainloop()

Что действительно нужно сделать, так это начать с 3 переменных: x, y (центр круга) и размера. Оттуда я могу использовать простую математику для определения набора (x0, y0, x1, y1), необходимого для создания круга (http://docs.huihoo.com/tkinter/tkinter-reference-a-gui-for-python/create_oval.html)

Я хочу сделать это программно, введя размер как значение из набора данных, а x, y как зависимое значение (если мне нужен 1 круг, я бы использовал x1, y1, если мне нужно два круга, они будет х2, у2 и х3, у3 и т. д.). Цель состоит в том, чтобы попытаться создать базовый визуализатор для набора данных, который у меня есть. Я полагаю, что могу написать массив координат x, y, которые я могу искать по мере необходимости и по мере того, как значение размера будет извлекаться из списка - так что было бы лучше написать функцию, которая бы принимала размер, ищите x, y, как требуется, и подача create_circle вызывает соответствующие значения.

Я знаю, что мне нужно вызывать функцию create_oval со значениями x0, y0, x1, y1, и мне интересно, если бы я мог вызвать другую функцию, которая позволила бы мне каждый раз получать эти значения, передавая ее x, y (центр круга) и значение размера (радиуса), и для него верните мне соответствующие значения x0, y0, x1, y1.

Поскольку это математический предмет многократного использования, я думаю, что мне нужно создать класс, но я не могу найти учебник, который поможет мне понять, как определить функцию класса, а затем вызывать ее каждый раз, когда мне нужно Это.

Я ценю, что, возможно, я не очень хорошо сформулировал это, я пытаюсь выучить элементарный питон самостоятельно (без знания CS), поэтому, пожалуйста, простите меня, если я назвал что-то неправильно или пропустил что-то важное.

Может ли кто-нибудь подсказать мне подсказку или указатель на приличный ресурс?

1 Ответ

1 голос
/ 17 февраля 2012

Python позволяет вам возвращать любой тип объекта из функции;в частности, вы можете вернуть кортеж (x0,y0,x,1,y1), который вам нужен для create_oval:

def enclosing_box(x, y, radius):
    """Given the coordinates of the circle center and its radius, return the top-left and bottom-right coordinates of the enclosing box."""
    return (x-radius, y-radius, x+radius, y+radius)

Затем вы можете использовать синтаксис *args для вызова функции с множествомаргументов, взятых из последовательности (список, кортеж и т. д.).Вы можете использовать его для вызова create_oval следующим образом:

coords = enclosing_box(x,y,radius)
w.create_oval(*coords)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...