Is There A Way To Rotate Text Around (or Inside) A Circle?
typical spinning wheelI am making a spinning wheel in Python tKinter. Usually, when you spin the wheel, you land on a random slice on the wheel, where the random choice is the text
Solution 1:
As a simple example of a text block rotating along a circular path, you could do something like this.
import math
import tkinter as tk
def 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 math
import tkinter as tk
def 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()
Solution 2:
You can rotate the text. Tcl 8.6 added this feature.
import tkinter as tk
defrotate(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 math
import tkinter as tk
def 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()
Post a Comment for "Is There A Way To Rotate Text Around (or Inside) A Circle?"