rotate() in Tkinter
Stephen D Evans
stevee at recombinant.demon.co.uk
Wed Dec 6 21:28:50 CET 2000
To rotate an oval convert the oval to a polygon and rotate that. Polygons are
easy to rotate, but this has to be done to the points before calling
create_polygon().
Referring to Tk documentation - The canvas does not support rotation.
'Practical Programming in Tcl and Tk', 3rd edition, 2000, by Brent B. Welsh,
publisher Prentice Hall PTR
This is a simple example.
(There are better methods of creating the points for an oval. Try fast
generation of ellipsoids in 'Graphics Gems V', 1995, edited by Alan W Paeth,
publisher AP Professional)
#
#
import math
import Tkinter
def poly_oval(x0,y0, x1,y1, steps=20, rotation=0):
"""return an oval as coordinates suitable for create_polygon"""
# x0,y0,x1,y1 are as create_oval
# rotation is in degrees anti-clockwise, convert to radians
rotation = rotation * math.pi / 180.0
# major and minor axes
a = (x1 - x0) / 2.0
b = (y1 - y0) / 2.0
# center
xc = x0 + a
yc = y0 + b
point_list = []
# create the oval as a list of points
for i in range(steps):
# Calculate the angle for this step
# 360 degrees == 2 pi radians
theta = (math.pi * 2) * (float(i) / steps)
x1 = a * math.cos(theta)
y1 = b * math.sin(theta)
# rotate x, y
x = (x1 * math.cos(rotation)) + (y1 * math.sin(rotation))
y = (y1 * math.cos(rotation)) - (x1 * math.sin(rotation))
point_list.append(round(x + xc))
point_list.append(round(y + yc))
return point_list
import Tkinter
root = Tkinter.Tk()
canvas = Tkinter.Canvas(root, width=400, height=400)
dict = {}
dict['outline'] = 'black'
dict['fill'] = 'yellow'
dict['smooth'] = 'true'
# use a polygon to draw an oval rotated 30 degrees anti-clockwise
apply(canvas.create_polygon, tuple(poly_oval(40,40, 200,300, rotation=30)),
dict)
canvas.pack()
root.mainloop()
-- Stephen D Evans
Dethe Elza wrote:
> I'm trying to create a complex cursor in Tkinter. I want to have an image
> which I can rotate, change the color of, and move about. I can build it as
> a vector image, but I use ovals. I haven't found any way to rotate images,
> vector drawings, or ovals in Tk.
>
> TIA
>
> --Dethe
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://mail.python.org/pipermail/python-list/attachments/20001206/0006828b/attachment.html>
More information about the Python-list
mailing list