有没有一种方法可以围绕(或在)圆形内旋转文本?

3
典型的旋转轮子我正在使用Python tKinter制作旋转轮。通常,当您旋转轮时,会落在轮子上的一个随机片段上,而随机选择就是显示在该片段上的文本。我无法找到一种方法来旋转片段上的文本。

我尝试使用create_text函数中的角度选项,但它只会将文本围绕圆心旋转:

for x in range(len(spinList)):
    color = "#"+("%06x"%random.randint(0,16777215))
    c.create_arc(xy, start=90+((360/size)*x), extent=(360/size), fill=color, outline='black', width=2)
    c.create_text(200, 200, text=spinList[x], angle=90+((180/size)*x)) 

我期望的结果是希望每个旋转轮片上都能显示文本,但实际上它只是围绕中心点旋转。有没有方法可以避免这种情况发生?


更明确地说,(200,200)是圆的中心。我需要帮助找出每个切片上的坐标。 - No Bounds
这样做是有道理的,但它如何能够改变圆周上的坐标呢? - No Bounds
2个回答

5
作为一个简单的例子,展示文本块沿圆形路径旋转的效果,你可以像这样做。
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()

[编辑] 在@Novel的建议基础上,tcl8.6添加了一个"rotate"(旋转)功能,下面是一个例子,其中文本沿着圆形路径旋转并改变方向:
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()

这很棒,但我仍然不明白如何制作出实际的旋转轮设计。请检查我在上面描述中添加的链接。 - No Bounds

3
您可以旋转文本。Tcl 8.6 添加了此功能。
import tkinter as tk

def 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()

如果您结合这两个答案,就可以得到您想要的东西,其中您需要更改每个文本的旋转和位置。

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()

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接