tkinter - 从 Turtle 翻译成 Tkinter,绘制摩洛哥马赛克
问题描述
我想重现这里看到的美丽的摩洛哥马赛克。代码使用的是 Turtle。我想把它翻译成 Tkinter。我很幸运地在此处修改了答案中的代码以绘制到画布上。当然有很多缺失,因为没有从原点绘制线。我不知道该怎么做。一个想法是我可能会覆盖 n 个多边形,每个多边形虽然旋转了一些 2 * pi/n 度。这仍然留下了将线从原点获取到每个多边形的初始点和最终点的问题。我认为这不会完全解决所有问题,但这是一个很好的开始。
或者也许以某种方式让多边形围绕中心旋转更简单?
from tkinter import *
import math
canvas_width = 400
canvas_height =400
python_green = "#476042"
def polygon(canvas,sides=10, radius=100, rotation=0, translation=None, outline=python_green, fill='White', width = 1):
one_segment = math.pi * 2 / sides
points = [
(math.sin(one_segment * i + rotation) * radius + canvas_width/2,
math.cos(one_segment * i + rotation) * radius + canvas_height/2)
for i in range(sides)]
if translation:
points = [[sum(pair) for pair in zip(point, translation)]
for point in points]
canvas.create_polygon(points, outline=outline, fill='', width=width)
master = Tk()
w = Canvas(master, width=canvas_width, height=canvas_height)
w.pack()
polygon(w,outline='green', width=2)
mainloop()
解决方案
您可以使用相同的代码,而无需将其“翻译”为 tkinter - 您只需要创建一个canvas
然后使用它直接RawTurtle
绘制canvas
。
import turtle
import tkinter as tk
root = tk.Tk()
canvas = tk.Canvas(root,width=600,height=600)
canvas.pack()
#below code same from the linked source
myPen = turtle.RawTurtle(canvas) #changed from turtle.Turtle()
myPen.shape("arrow")
myPen.speed(1000)
def drawMosaic(color1, numberOfSides1, size1, color2, numberOfSides2, size2, numberOfIterations):
for i in range(0, numberOfIterations):
myPen.color(color1)
for j in range(0, numberOfSides1):
myPen.forward(size1)
myPen.left(360 / numberOfSides1)
myPen.color(color2)
for k in range(0, numberOfSides2):
myPen.forward(size2)
myPen.left(360 / numberOfSides2)
myPen.left(360 / numberOfIterations)
drawMosaic("#980C6B", 8, 80, "#DD6BB8", 5, 70, 20)
root.mainloop()
推荐阅读
- excel - Excel根据字符串列创建组ID
- php - 使用后值php验证数组
- mysql - 使用“*”在选择中添加一个额外的列
- java - 验证不适用于 Spring Boot 和 Hibernate
- azure - 将置信度分数添加到 Azure 认知服务 Web 应用
- angular - Angular Universal:错误:找不到“[object Object]”的 NgModule 元数据
- java - PDFTextStripper 提取不正确的泰语文本
- javascript - 使用 GatsbyJS 的 GraphQL 查询中的范围文件夹结构
- sql - 将正确的 SQL 转换为 HQL
- configuration - VuePress 配置中的前端默认值