有没有一种方法可以在一个圆的周围(或内部)旋转文本?

2024-10-03 02:44:03 发布

您现在位置:Python中文网/ 问答频道 /正文

typical spinning wheel我正在用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)) 

我想要的结果是文本显示在旋转的轮子的每个单独的切片上,但是它是围绕中点旋转的。有没有办法不让这一切发生?你知道吗


Tags: 方法text文本sizetkintercreate切片function
2条回答

作为一个文本块沿圆形路径旋转的简单示例,您可以这样做。你知道吗

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

可以旋转文本。tcl8.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()

相关问题 更多 >