帮我用tkinter写一个递归树,用户可以输入树的深度
时间: 2023-08-31 10:27:06 浏览: 92
### 回答1:
好的,我可以帮你实现这个功能。以下是一个简单的例子:
```python
import tkinter as tk
def create_tree(canvas, x, y, length, angle, depth):
if depth == 0:
return
x_end = x + length * np.sin(angle)
y_end = y - length * np.cos(angle)
canvas.create_line(x, y, x_end, y_end)
create_tree(canvas, x_end, y_end, length * 0.7, angle + np.pi/4, depth-1)
create_tree(canvas, x_end, y_end, length * 0.7, angle - np.pi/4, depth-1)
def draw_tree():
depth = int(entry.get())
create_tree(canvas, 250, 400, 100, -np.pi/2, depth)
root = tk.Tk()
root.geometry('500x500')
canvas = tk.Canvas(root, width=500, height=500)
canvas.pack()
label = tk.Label(root, text='输入树的深度:')
label.pack()
entry = tk.Entry(root)
entry.pack()
button = tk.Button(root, text='绘制', command=draw_tree)
button.pack()
root.mainloop()
```
这个程序使用 tkinter 库创建了一个窗口并添加了一个画板,用户可以在输入框中输入树的深度,然后点击按钮来绘制递归树。
在 create_tree 函数中,我们使用递归来绘制树的分支。每次递归调用都会画一条线条,并根据递归深度不断缩小线条长度和角度,最终形成递归树。
注意,在使用 tkinter 绘图时,坐标系的原点在画布的左上角。因此,我们需要将角度从正向上开始计算,并将 y 轴的方向翻转过来。
### 回答2:
当用户输入树的深度后,我们可以使用tkinter这个Python库来绘制一个递归树。下面是一个使用tkinter编写的递归树的示例代码:
```python
import tkinter as tk
def draw_tree(canvas, x, y, length, angle, depth):
if depth == 0:
return
else:
x_end = x + int(length * tk.cos(tk.radians(angle)))
y_end = y - int(length * tk.sin(tk.radians(angle)))
canvas.create_line(x, y, x_end, y_end)
draw_tree(canvas, x_end, y_end, length*0.8, angle-30, depth-1)
draw_tree(canvas, x_end, y_end, length*0.8, angle+30, depth-1)
def create_tree(depth):
root = tk.Tk()
canvas = tk.Canvas(root, width=800, height=600)
canvas.pack()
base_x = 400
base_y = 500
length = 200
angle = 90
draw_tree(canvas, base_x, base_y, length, angle, depth)
root.mainloop()
depth = int(input("请输入树的深度:"))
create_tree(depth)
```
以上代码在用户输入树的深度后会绘制一个递归树。树的根节点默认位置在画布的中央底部(x=400,y=500),树的长度为200,每个子树相对于父树的长度缩小为0.8,每个子树与父树的夹角分别为-30度和+30度,树的深度由用户输入决定。
用户可以运行代码并在控制台中输入树的深度,然后将会在tkinter窗口中绘制对应深度的递归树。
### 回答3:
当用户输入树的深度时,我们可以使用tkinter库来创建一个GUI应用程序,用递归的方式绘制一棵树。
首先,我们需要导入tkinter库和math库,因为我们会用到其中的一些功能。
```python
import tkinter as tk
import math
```
接下来,我们创建一个函数来绘制树。这个函数将会接收用户输入的树的深度作为参数。
```python
def draw_tree(depth):
# 在这里编写绘制树的代码
pass
```
在draw_tree函数中,我们需要在窗口中绘制树。首先,我们创建一个Canvas对象来绘制树。
```python
def draw_tree(depth):
canvas.delete('all') # 清空之前绘制的图形
canvas.create_line(250, 500, 250, 400, width=5) # 绘制树干
draw_branch(250, 400, 90, depth) # 绘制树枝
```
接下来,我们编写一个新的函数draw_branch来递归地绘制树枝。
```python
def draw_branch(x, y, angle, depth):
if depth == 0:
return
length = 100 # 树枝的长度
x2 = x + length * math.cos(math.radians(angle))
y2 = y - length * math.sin(math.radians(angle))
canvas.create_line(x, y, x2, y2, width=3) # 绘制树枝
# 计算下一级树枝的位置和角度,并递归调用draw_branch函数
draw_branch(x2, y2, angle-30, depth-1)
draw_branch(x2, y2, angle+30, depth-1)
```
最后,我们需要创建一个主窗口以及一个输入框供用户输入树的深度。
```python
if __name__ == '__main__':
root = tk.Tk()
root.title("递归树")
canvas = tk.Canvas(root, width=500, height=500)
canvas.pack()
depth_entry = tk.Entry(root, width=10)
depth_entry.pack()
button = tk.Button(root, text="绘制树", command=lambda: draw_tree(int(depth_entry.get())))
button.pack()
root.mainloop()
```
这样,用户就可以在文本框中输入树的深度,并点击按钮绘制递归树了。
阅读全文