Tkinter编写一个程序显示递归树
时间: 2024-04-30 22:20:39 浏览: 79
python实现文法左递归的消除方法
好的,以下是一个简单的Tkinter程序,用于显示递归树:
```python
import tkinter as tk
class RecursiveTree:
def __init__(self, master, depth, x, y, angle):
self.master = master
self.depth = depth
self.x = x
self.y = y
self.angle = angle
if self.depth > 0:
# 计算下一层节点的坐标和角度
x_left = self.x + self.depth * 10 * tk.cos(self.angle)
y_left = self.y + self.depth * 10 * tk.sin(self.angle)
angle_left = self.angle + tk.pi / 4
x_right = self.x + self.depth * 10 * tk.cos(self.angle)
y_right = self.y + self.depth * 10 * tk.sin(self.angle)
angle_right = self.angle - tk.pi / 4
# 递归创建左右子节点
self.left_tree = RecursiveTree(self.master, self.depth - 1, x_left, y_left, angle_left)
self.right_tree = RecursiveTree(self.master, self.depth - 1, x_right, y_right, angle_right)
# 创建节点
self.node = self.master.create_oval(self.x - 5, self.y - 5, self.x + 5, self.y + 5, fill='black')
def main():
# 创建主窗口
root = tk.Tk()
root.title('Recursive Tree')
# 创建画布
canvas = tk.Canvas(root, width=500, height=500)
canvas.pack()
# 创建递归树
tree = RecursiveTree(canvas, 5, 250, 250, tk.pi / 2)
# 进入主循环
root.mainloop()
if __name__ == '__main__':
main()
```
在程序中,我们使用了一个递归的类`RecursiveTree`来创建递归树。类的构造函数接受四个参数:`master`表示父控件,`depth`表示当前节点的深度,`x`和`y`表示当前节点的坐标,`angle`表示当前节点与父节点的夹角。如果深度大于0,我们就计算出左右子节点的坐标和角度,并递归创建左右子节点。最后,我们在当前节点的位置创建一个黑色的圆表示节点。
在主函数中,我们创建了一个主窗口和一个画布,并在画布上创建了一个深度为5的递归树。最后,我们进入主循环,等待用户交互。
阅读全文