有没有办法在圆圈周围(或在圆圈内)旋转文本?

No *_*nds 3 python geometry text tkinter text-widget

典型的纺车我正在 Python tKinter 中制作纺车。通常,当您旋转轮子时,您会落在轮子上的一个随机切片上,其中随机选择是切片上显示的文本。我找不到在切片上旋转文本的方法。

我试图在 中使用角度选项create_text function,只有它围绕圆心旋转文本:

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)) 
Run Code Online (Sandbox Code Playgroud)

我想要的预期结果是在纺车的每个单独切片上显示的文本,而是围绕中点旋转。有没有办法不让这种情况发生?

Reb*_*que 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()
Run Code Online (Sandbox Code Playgroud)

[编辑] 基于tcl8.6添加了一个rotate功能的@Novel 建议,这是一个文本沿圆形路径旋转并改变方向的示例

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()
Run Code Online (Sandbox Code Playgroud)