【问题标题】:Is there a way to rotate text around (or inside) a circle?有没有办法在一个圆圈周围(或内部)旋转文本?
【发布时间】:2019-11-01 07:01:59
【问题描述】:

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

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

【问题讨论】:

  • 为了更清楚,(200, 200) 是圆的中心。我需要帮助来确定每个切片上的坐标
  • 这很有道理,但它怎么能改变圆圈周围的坐标呢?

标签: python tkinter text geometry text-widget


【解决方案1】:

作为一个沿圆形路径旋转的文本块的简单示例,您可以执行以下操作。

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

【讨论】:

  • 这很棒;但我仍然不明白如何让它像一个真正的纺车设计。检查我在上面的描述中添加的链接
【解决方案2】:

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

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

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

【讨论】:

    猜你喜欢
    • 2019-04-25
    • 2021-07-30
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-06-24
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多