2024-03-29 06:49:59 发布
网友
我需要在绘制图形的画布上使用turtle模块绘制一些东西。你知道吗
我曾考虑过使用matplotlib来制作一个图形,但我需要稍后在该图形上用turtle绘制一些东西。我可以用海龟画图表和其他东西,但那要复杂得多。你知道吗
有人能想出更好的办法吗?你知道吗
自从你问起,这个问题就一直萦绕在我的脑海里。我研究过各种方法,包括堆叠的看不见的画布,但没有运气。你知道吗
我最终决定尝试在幕后绘图,将绘图的图像保存到内存文件中,并将该图像加载到海龟背景中。通过为FigureCanvasTkAgg引入tkinter,它变得有点复杂,然后需要嵌入tkinter的turtle。但它是有效的。你知道吗
FigureCanvasTkAgg
下面的代码使用matplotlib绘制一个正弦波,然后使用turtle在其上涂鸦Hilbert曲线。就因为我能:
import tkinter as tk from io import BytesIO from turtle import TurtleScreen, RawTurtle from PIL import Image, ImageTk import numpy as np from matplotlib.backends.backend_tkagg import FigureCanvasTkAgg from matplotlib.figure import Figure root = tk.Tk() # Plot graph figure = Figure(figsize=(5, 5)) subplot = figure.add_subplot(111) x = np.arange(0, 3 * np.pi, 0.1) y = np.sin(x) subplot.plot(x, y) # Make memory image of graph invisible_figure_canvas = FigureCanvasTkAgg(figure, root) buffer = BytesIO() figure.savefig(buffer, format="png") buffer.seek(0) # Open memory as tkinter image image = Image.open(buffer) photoImage = ImageTk.PhotoImage(image) buffer.close() # Now do our turtle drawing embedded in tkinter canvas = tk.Canvas(root, width=500, height=500) canvas.pack() screen = TurtleScreen(canvas) screen._setbgpic(screen._bgpic, photoImage) # bypass restrictions (protected access) turtle = RawTurtle(screen, shape='turtle') turtle.shapesize(0.5) def hilbertCurve(n, angle): if n <= 0: return turtle.left(angle) hilbertCurve(n - 1, -angle) turtle.forward(10) turtle.right(angle) hilbertCurve(n - 1, angle) turtle.forward(10) hilbertCurve(n - 1, angle) turtle.right(angle) turtle.forward(10) hilbertCurve(n - 1, -angle) turtle.left(angle) hilbertCurve(4, 90) screen.mainloop()
自从你问起,这个问题就一直萦绕在我的脑海里。我研究过各种方法,包括堆叠的看不见的画布,但没有运气。你知道吗
我最终决定尝试在幕后绘图,将绘图的图像保存到内存文件中,并将该图像加载到海龟背景中。通过为
FigureCanvasTkAgg
引入tkinter,它变得有点复杂,然后需要嵌入tkinter的turtle。但它是有效的。你知道吗下面的代码使用matplotlib绘制一个正弦波,然后使用turtle在其上涂鸦Hilbert曲线。就因为我能:
相关问题 更多 >
编程相关推荐