Is there a way to rotate text around (or inside) a circle? Is there a way to rotate text around (or inside) a circle? tkinter tkinter

Is there a way to rotate text around (or inside) a circle?


As a simple example of a text block rotating along a circular path, you could do something like this.

import mathimport tkinter as tkdef rotate(angle=0):    x = math.cos(angle) * 200 + 250    y = math.sin(angle) * 200 + 250    canvas.coords(txt, x, y)    canvas.after(100, rotate, angle+0.1)root = tk.Tk()canvas = tk.Canvas(root, width=500, height=500)txt = canvas.create_text(250, 50, text='around and around')rotate()canvas.pack()root.mainloop()

[Edit] building on @Novel suggestion that tcl8.6 has added a rotate feature, here is an example where the text rotates along a circular path, and changes orientation:

import mathimport tkinter as tkdef rotate(angle1=0, angle2=0):    dx = math.cos(angle1) * 200 + 250    dy = math.sin(angle1) * 200 + 250    canvas.coords(txt, dx, dy)    canvas.itemconfig(txt, angle=angle2)    canvas.after(100, rotate, angle1+0.1, angle2-15)root = tk.Tk()canvas = tk.Canvas(root, width=500, height=500)txt = canvas.create_text(250, 50, text='around and around')rotate()canvas.pack()root.mainloop()


You can rotate the text. Tcl 8.6 added this feature.

import tkinter as tkdef rotate(angle=0):    canvas.itemconfig(txt, angle=angle)    canvas.after(100, rotate, angle+5)root = tk.Tk()canvas = tk.Canvas(root, width=500, height=500)txt = canvas.create_text(250, 250, text='around and around')rotate()canvas.pack()root.mainloop()

If you combine these 2 answers you can get what you want, where you change the rotation AND location of each text.

import mathimport tkinter as tkdef rotate(angle=0):    x = math.cos(math.radians(angle)) * 200 + 250    y = math.sin(math.radians(angle)) * 200 + 250    canvas.itemconfig(txt, angle=-angle)    canvas.coords(txt, x, y)    canvas.after(100, rotate, angle+5)root = tk.Tk()canvas = tk.Canvas(root, width=500, height=500)txt = canvas.create_text(250, 250, text='around and around')rotate()canvas.pack()root.mainloop()