Есть ли способ вращать текст вокруг (или внутри) круга? - PullRequest
3 голосов
/ 18 июня 2019

типичное прялка Я делаю прялку в 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)) 

ожидаемый результат, который я хотел, чтобы текст отображался на каждом отдельном срезе вращающегося колеса, но вместо этого он вращался вокруг средней точки.Есть ли способ не допустить этого?

Ответы [ 2 ]

4 голосов
/ 18 июня 2019

В качестве простого примера текстового блока, вращающегося по круговой траектории, вы можете сделать что-то вроде этого.

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 feature, здесь пример, в котором текст вращается по круговой траектории и меняет ориентацию :

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 голосов
/ 18 июня 2019

Вы можете вращать текст.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()
...