tkinter在用画布指定位置内嵌动态变化曲线代码
时间: 2024-03-11 08:49:27 浏览: 24
以下是一个使用Tkinter画布(canvas)嵌入动态变化曲线的示例代码:
```python
import tkinter as tk
import math
class Graph:
def __init__(self, canvas, x_min, x_max, y_min, y_max, func):
self.canvas = canvas
self.x_min = x_min
self.x_max = x_max
self.y_min = y_min
self.y_max = y_max
self.func = func
self.draw_axes()
def draw_axes(self):
# 画坐标轴
width = self.canvas.winfo_width()
height = self.canvas.winfo_height()
self.canvas.create_line(0, height/2, width, height/2, fill="black")
self.canvas.create_line(width/2, 0, width/2, height, fill="black")
def draw_graph(self):
# 画函数图像
width = self.canvas.winfo_width()
height = self.canvas.winfo_height()
x_range = self.x_max - self.x_min
y_range = self.y_max - self.y_min
points = []
for i in range(-width//2, width//2):
x = i / (width//2) * x_range + (self.x_max + self.x_min) / 2
y = -self.func(x)
j = (y - self.y_min) / y_range * height
points.append(i + width//2)
points.append(j)
self.canvas.delete("graph")
self.canvas.create_line(points, tags="graph", fill="red")
class App:
def __init__(self, master):
self.master = master
self.canvas = tk.Canvas(master, width=400, height=400)
self.canvas.pack()
self.graph = Graph(self.canvas, -10, 10, -10, 10, math.sin)
self.animate()
def animate(self):
self.graph.draw_graph()
self.master.after(10, self.animate)
root = tk.Tk()
app = App(root)
root.mainloop()
```
在这个例子中,我们定义了一个Graph类来画曲线,它包含了画坐标轴和画函数图像的函数。我们在App类中创建了一个Graph实例,并使用`after`函数来实现动态更新。这个例子中的函数是sin函数,你可以替换成你自己的函数。