Tkinter编写一个程序画树状图
时间: 2024-05-05 10:22:01 浏览: 5
以下是一个使用Tkinter绘制树状图的示例程序:
```python
import tkinter as tk
class Tree:
def __init__(self, parent, text, x, y, width=80, height=40):
self.parent = parent
self.text = text
self.x = x
self.y = y
self.width = width
self.height = height
self.children = []
def draw(self, canvas):
# 绘制节点
canvas.create_rectangle(self.x-self.width//2, self.y-self.height//2, self.x+self.width//2, self.y+self.height//2, fill="white")
canvas.create_text(self.x, self.y, text=self.text)
# 绘制连线
for child in self.children:
canvas.create_line(self.x, self.y+self.height//2, child.x, child.y-self.height//2)
# 绘制子节点
for child in self.children:
child.draw(canvas)
def add_child(self, text):
child = Tree(self, text, self.x, self.y+self.height*2)
self.children.append(child)
return child
class App:
def __init__(self, master):
self.master = master
self.canvas = tk.Canvas(self.master, width=800, height=600)
self.canvas.pack()
self.canvas.bind("<Button-1>", self.on_click)
self.root = Tree(None, "Root", 400, 50)
self.selected_node = None
def on_click(self, event):
x, y = event.x, event.y
node = self.find_node(self.root, x, y)
if node:
self.selected_node = node
def find_node(self, tree, x, y):
if tree is None:
return None
if tree.x - tree.width//2 <= x <= tree.x + tree.width//2 and tree.y - tree.height//2 <= y <= tree.y + tree.height//2:
return tree
for child in tree.children:
node = self.find_node(child, x, y)
if node:
return node
return None
def add_node(self, text):
if self.selected_node:
self.selected_node.add_child(text)
else:
self.root.add_child(text)
self.draw_tree()
def draw_tree(self):
self.canvas.delete("all")
self.root.draw(self.canvas)
root = tk.Tk()
app = App(root)
app.add_node("Node 1")
app.add_node("Node 2")
app.add_node("Node 3")
app.add_node("Node 4")
app.add_node("Node 5")
root.mainloop()
```
运行程序后,可以通过鼠标点击节点来选中,并通过菜单添加子节点。程序会随着节点的添加实时更新绘图。