diff --git a/X1.py b/X1.py new file mode 100644 index 0000000..3c45458 --- /dev/null +++ b/X1.py @@ -0,0 +1,68 @@ +import math +# print(math.cos(math.radians(90))) +# +# start=(440,670) +# print(start[0]+200*math.cos(math.radians(90))) +# print(start[1] - 200 * math.sin(math.radians(90))) + +import tkinter as tk + +# 创建主窗口 +root = tk.Tk() +root.title("绘制Y形") + +# 设置画布 +canvas = tk.Canvas(root, bg="white", width=1000, height=700) +canvas.pack() + + +def draw_shape(): + # 绘制三角形 + point1 = [(150, 20), (50, 200), (250, 200)] + canvas.create_polygon(point1, outline='black', fill='white', width=2) + # 绘制菱形 + point2 = [(150, 240), (50, 360), (150, 480), (250, 360)] + canvas.create_polygon(point2, outline='black', fill='white', width=2) + # 绘制 Y形 + canvas.create_line(340, 20, 420, 80, fill='blue3', width=2) # 画左臂 + canvas.create_line(510, 20, 420, 80, fill='blue3', width=2) # 画右臂 + canvas.create_line(420, 180, 420, 80, fill='blue3', width=2) # 画中心线 + # 绘制圆形 + canvas.create_oval(340, 240, 540, 440, width=2) + # 绘制直线 + canvas.create_line(330, 470, 550, 470, fill='blue3', width=2) + # 绘制正方形 + canvas.create_rectangle(650, 420, 800, 270, width=2) + + +# root=tk.Tk() +# canvas = tk.Canvas(root, bg="white", highlightthickness=1, highlightbackground="tomato") +# canvas.config(width=1000, height=700) +# canvas.place(x=50, y=50) +# +# canvas.pack() +draw_shape() + +root.mainloop() + + +def draw_rect(x, y, w, a): + coord = (x, y, x - w * math.cos(math.radians(a)), y + w * math.sin(math.radians(a)), \ + x - math.sqrt(2) * w * math.sin(math.radians(a + 45)), + y - math.sqrt(2) * w * math.cos(math.radians(a + 45)), \ + x - w * math.sin(math.radians(a)), y - w * math.cos(math.radians(a))) + canvas.create_polygon(coord, fill='', outline='black') + + +root = tk.Tk() +root.geometry('1000x800') +canvas = tk.Canvas(root, bg="white", highlightthickness=1, highlightbackground="tomato") +canvas.config(width=1000, height=700) +canvas.pack() +a = 0 +# 实现边长增加5,旋转度数增加5 +for i in range(5, 301, 5): + draw_rect(400, 400, i, a) + canvas.update() + a += 5 +root.mainloop() diff --git a/X2.py b/X2.py new file mode 100644 index 0000000..64e24ca --- /dev/null +++ b/X2.py @@ -0,0 +1,49 @@ +# FH的python代码 +# 文本分析和图像识别 +# 开发时间 2023/7/17 17:07 +import tkinter as tk +import math + +root = tk.Tk() +cv_small = tk.Canvas(root, width=220, height=180) +cv_small.pack() + +cv_small.delete("all") # 清除画布 +cv_small.create_line(50, 30, 110, 90, fill='red', width=2) # 左臂 +cv_small.create_line(170, 30, 110, 90, fill='red', width=2) # 右臂 +cv_small.create_line(110, 160, 110, 90, fill='red', width=2) # 中心线 + +root.mainloop() + + +def Y_tree(depth, percent, left_angle, right_angle, start_point, angle, length, canvas): + if depth == 0: + return + end_point = (start_point[0] + length * math.cos(math.radians(angle)), + start_point[1] - length * math.sin(math.radians(angle))) + canvas.create_line(start_point, end_point, fill='LightBlue4', width=2) + # canvas.update() + # canvas.after(1) + Y_tree(depth - 1, percent, left_angle, right_angle, end_point, angle + right_angle, length * percent, + canvas) # 画右枝 + Y_tree(depth - 1, percent, left_angle, right_angle, end_point, angle - left_angle, length * percent, + canvas) # 画左枝 + # print(start_point,end_point) + + +if __name__ == "__main__": + root = tk.Tk() + canvas = tk.Canvas(root, width=1200, height=1000) + canvas.pack() + + start_point = (300, 600) + angle = 45 + length = 200 + depth = 12 + percent = 0.7 + left_angle = 30 + right_angle = 30 + + Y_tree(depth, percent, left_angle, right_angle, start_point, angle, length, canvas) + + root.mainloop() diff --git a/X24.py b/X24.py new file mode 100644 index 0000000..e8e4a62 --- /dev/null +++ b/X24.py @@ -0,0 +1,123 @@ +# FH的python代码 +# 文本分析和图像识别 +# 开发时间 2023/7/17 15:52 +# 创建主窗口 +import fractaltree +import tkinter as tk +import tkinter.font as tf + +root = tk.Tk() +w = root.winfo_screenwidth() +h = root.winfo_screenheight() +root.geometry("%dx%d" % (w, h)) +root.title("分形树 电脑的分辨率是%dx%d" % (root.winfo_screenwidth(), root.winfo_screenheight())) +# 创建新增分形图案类型所需的字典 +str_params_dict = {} +pattern_dict = {} +tree_dict = {} +update_params_dict = {} + +# 定义变量,用于存储用户选择的分形类型 +shape_var = tk.StringVar() + +# 设置字体 +ft1 = tf.Font(family="黑体", size=21) +ft2 = tf.Font(family="黑体", size=21, weight=tf.BOLD) +ft3 = tf.Font(family="黑体", size=18) +ft4 = tf.Font(family="黑体", size=19) + +# 创建一个标签 +lab1 = tk.Label(root, text="分形图案类型", font=ft1) +lab1.place(x=20, y=10, width=180, height=50, anchor='nw') + +def add_fractal(): + # 创建一个按钮,用来新增分形图案类型 + button_addPattern = tk.Button(root, text="新增分形图案类型", command=add_fractal, font=ft2) + button_addPattern.place(x=500, y=10, width=270, height=50, anchor='ne') +## 滚动框的设置 +# 创建一个Canvas对象,使用该对象作为滚动区域 +canvas = tk.Canvas(root, width=445, height=160) + +# 创建一个列表框对象Rlist,并将其放入滚动区域中 +Rlist = tk.Listbox(canvas, width=445, height=20, bg='white', highlightthickness=1, highlightbackground="LightBlue") + +# 创建滚动条对象并与Canvas绑定,实现滚动条功能 +scrollbar = tk.Scrollbar(root, orient="vertical", command=canvas.yview) +canvas.configure(yscrollcommand=scrollbar.set) + +canvas.place(x=20, y=75, anchor='nw') +scrollbar.place(x=470, y=75, width=30, height=160, anchor='nw') + +# 创建一个Frame组件用于放置单选框 +frame = tk.Frame(Rlist, bg='white') +frame.place(anchor='nw') + +# 将列表框放入Canvas中,并设置Canvas窗口的大小 +box_id = canvas.create_window((0, 0), window=Rlist, anchor="nw") +Rlist.update_idletasks() # 更新视图 +canvas.config(scrollregion=canvas.bbox("all")) # 设置画布的滚动区域 + +# 添加单选框到 Frame组件 +rb_Y = tk.Radiobutton(frame, text="Y形分形 Y_Fractal", variable=shape_var, value='Y', bg="white", font=ft1) +rb_Y.pack(anchor='w') +rb_Triangle = tk.Radiobutton(frame, text="三角形分形 Triangle_Fractal", variable=shape_var, value='Triangle',bg="white", font=ft1) +rb_Triangle.pack(anchor='w') +rb_Rect = tk.Radiobutton(frame, text="矩形分形 Rect_Fractal", variable=shape_var, value='Rect', bg="white", font=ft1) +rb_Rect.pack(anchor='w') + +from fractaltree import pd +import os +if os.path.exists('params.csv'): + df=pd.read_csv("params.csv") + for i in df["分型名称"]: + rb1=tk.Radiobutton(frame,text=i,variable=shape_var,value=df[df['分型名称']==i].分形英文.values[0], bg="white", font=ft1) + rb1.pack(anchor='w') + +# 将默认选项设置为 Y 形分形 +rb_Y.select() + +# 创建一个标签 +lab2 = tk.Label(root, text="分形参数设置【参数含义:参量名=参量值】", font=ft4) +lab2.place(x=20, y=255, width=490, height=40, anchor='nw') + +# 大画布的宽度和高度变量,方便后期调整 +big_width = 880 +big_height = 690 + +# 创建蓝色边框的大画布 +cv_big = tk.Canvas(root, bg="white", highlightthickness=1, highlightbackground="LightBlue") +cv_big.config(width=big_width, height=big_height) +cv_big.place(x=530, y=10, anchor='nw') + +# 创建红色边框的小画布,宽高设置为大画布的1/4 +cv_small = tk.Canvas(cv_big, bg="white", highlightthickness=1, highlightbackground="tomato") +cv_small.config(width=big_width * 0.25, height=big_height * 0.25) +cv_small.place(x=0, y=big_height, anchor='sw') + +#创建一个多行文本框 +params_text = tk.Text(root, bg="white", highlightthickness=1, highlightbackground="LightBlue") +params_text.configure(font=ft3, spacing1=15) +params_text.place(x=20, y=300, width=480, height=310, anchor='nw') +from fractaltree import params_Y +# 初始化分形参数并输出 +params_str = params_Y +params_text.insert(tk.INSERT, params_str) +from fractaltree import update_Text +# trace追踪变量w模式,回调函数update_text +shape_var.trace('w', lambda *args, str_params_dict=str_params_dict: update_Text()) +from fractaltree import delete_rb +from fractaltree import draw_pattern +from fractaltree import update_params +from fractaltree import draw_tree +# 创建四个按钮 +button_delete = tk.Button(root, text="删除\n选项", command=delete_rb, font=ft2) +button_delete.place(x=20, y=700, width=90, height=75, anchor='sw') +button_pattern = tk.Button(root, text="基本图\n案绘制", command=draw_pattern, font=ft2) +button_pattern.place(x=130, y=700, width=120, height=75, anchor='sw') +button_params = tk.Button(root, text="绘制参\n数设置", command=update_params, font=ft2) +button_params.place(x=270, y=700, width=120, height=75, anchor='sw') +button_drawTree = tk.Button(root, text="绘制", command=draw_tree, font=ft2) +button_drawTree.place(x=410, y=700, width=90, height=75, anchor='sw') + + + diff --git a/X3.py b/X3.py new file mode 100644 index 0000000..3cb8c39 --- /dev/null +++ b/X3.py @@ -0,0 +1,88 @@ +import tkinter as tk +import tkinter.font as tf +import math + +FinishLevel_Y = 14 +TreePercent_Y = 0.7 +LeftAngle_Y = 30 +RightAngle_Y = 30 +InitPoint_Y = (420, 500) +InitAngle_Y = 90 +InitLong_Y = 150 + +params_Y = " 分形层数:finishLevel={}\n" \ + " 缩放比例:treePercent={}\n" \ + " 左枝倾角:leftAngle={}\n" \ + " 右枝倾角:rightAngle={}\n" \ + " 初始点:initPoint={}\n" \ + " 初始角:initAngle={}\n" \ + " 初始长度:initLong={}".format(FinishLevel_Y, TreePercent_Y, LeftAngle_Y, RightAngle_Y, + InitPoint_Y, InitAngle_Y, InitLong_Y) + +# 创建全局变量 cv_small 和 cv_big +cv_small = None +cv_big = None + + +# Y形基本图案函数 +def yPattern(): + cv_small.delete("all") # 清除画布 + cv_small.create_line(30, 10, 90, 70, fill='red', width=2) # 左臂 + cv_small.create_line(150, 10, 90, 70, fill='red', width=2) # 右臂 + cv_small.create_line(90, 140, 90, 70, fill='red', width=2) + + +# Y形树执行函数 +def run_Y_tree(): + def Y_tree(depth, percent, left_angle, right_angle, start_point, angle, length, canvas): + if depth == 0: + return + end_point = (start_point[0] + length * math.cos(math.radians(angle)), + start_point[1] - length * math.sin(math.radians(angle))) + canvas.create_line(start_point, end_point, fill='LightBlue4', width=2) + Y_tree(depth - 1, percent, left_angle, right_angle, end_point, angle + right_angle, length * percent, + canvas) # 画右枝 + Y_tree(depth - 1, percent, left_angle, right_angle, end_point, angle - left_angle, length * percent, + canvas) # 画左枝 + + root = tk.Tk() + root.geometry('1270x650') + root.title('分形树') + + ft3 = tf.Font(family="黑体", size=18) + + global cv_small, cv_big # 声明 cv_small 和 cv_big 为全局变量 + + # 创建蓝色边框的大画布 + cv_big = tk.Canvas(root, bg="white", highlightthickness=1, highlightbackground="LightBlue") + cv_big_width = 880 + cv_big_height = 690 + cv_big.config(width=cv_big_width, height=cv_big_height) + cv_big.place(x=330, y=10, anchor='nw') + + # 创建红色边框的小画布 + cv_small_width = cv_big_width // 4 + cv_small_height = cv_big_height // 4 + cv_small = tk.Canvas(root, bg="white", highlightthickness=1, highlightbackground="red") + cv_small.config(width=cv_small_width, height=cv_small_height) + cv_small.place(x=530, y=cv_big_height - cv_small_height + 10, anchor='nw') + + # 绘制Y形基本图案 + yPattern() + + # 调用绘制Y形分形树的函数 + Y_tree(FinishLevel_Y, TreePercent_Y, LeftAngle_Y, RightAngle_Y, InitPoint_Y, InitAngle_Y, InitLong_Y, cv_big) + + # 创建底部的结果输出框 + output_text = tk.Text(root, bg="white", highlightthickness=1, highlightbackground="LightBlue") + output_text.configure(font=ft3, spacing1=8) + output_text.insert(tk.INSERT, params_Y) + # 设置文本框不可编辑 + output_text.configure(state="disabled") + output_text.place(x=20, y=800, width=1390, height=80, anchor='sw') + + root.mainloop() + + +# 调用运行Y形树的函数 +run_Y_tree() diff --git a/X35.py b/X35.py new file mode 100644 index 0000000..d1a3a30 --- /dev/null +++ b/X35.py @@ -0,0 +1,86 @@ +# FH的python代码 +# 文本分析和图像识别 +# 开发时间 2023/7/17 16:40 +import math +import fractaltree +def run_Y_tree(): + # Y形分形树函数 + def Y_tree(depth, percent, left_angle, right_angle, start_point, angle, length, canvas): + if depth == 0: + return + end_point = (start_point[0] + length * math.cos(math.radians(angle)), + start_point[1] - length * math.sin(math.radians(angle))) + canvas.create_line(start_point, end_point, fill='LightBlue4', width=2) + # canvas.update() + # canvas.after(1) + Y_tree(depth - 1, percent, left_angle, right_angle, end_point, angle + right_angle, length * percent, + canvas) # 画右枝 + Y_tree(depth - 1, percent, left_angle, right_angle, end_point, angle - left_angle, length * percent, + canvas) # 画左枝 + # print(start_point,end_point) + + # 清除画布 + cv_big.delete("all") + # 将初始参数传入函数 + Y_tree(finishLevel_Y, treePercent_Y, leftAngle_Y, rightAngle_Y, initPoint_Y, initAngle_Y, initLong_Y, cv_big) + output_text.delete("1.0", "end") + # 在底部的结果输出框输出分形树的绘制参数 + text = " 结果输出:<分形绘制参数的字符串形式输出>\n finishLevel={}, treePercent={}, leftAngle={}, rightAngle={}, " \ + "initPoint={}, initAngle={}, initLong={}".format(finishLevel_Y, treePercent_Y, leftAngle_Y, + rightAngle_Y, initPoint_Y, initAngle_Y, initLong_Y) + output_text.insert(tk.INSERT, text) + +# 三角形分形树执行函数(倒的坐标系) +def run_Triangle_tree(): + # 三角形分形树函数 + def Triangle_tree(depth, percent, start_point, angle, length, canvas): + if depth == 0: + return + # 左枝点 + end_point1 = (start_point[0] - length * math.sin(math.radians(angle)), + start_point[1] - length * math.cos(math.radians(angle))) + # 右枝点 + end_point2 = (start_point[0] + length * math.sin(math.radians(angle)), + start_point[1] - length * math.cos(math.radians(angle))) + # 画三角形 + canvas.create_polygon(start_point, end_point1, end_point2, fill='LightBlue4', outline='white') + # 画左枝 + Triangle_tree(depth - 1, percent, end_point1, angle, length * percent, canvas) + # 画右枝 + Triangle_tree(depth - 1, percent, end_point2, angle, length * percent, canvas) + # canvas.update() + # canvas.after(10) +# 方形分形树执行函数 +def run_Rect_tree(): + # 方形分形树函数 + def Rect_tree(depth, point1, point2, angle, canvas): + # 直线的旋转,point1是定点 + def rotate(point1, point2, angle): + x1, y1 = point1[0], point1[1] + x2, y2 = point2[0], point2[1] + x = x1 + (x2 - x1) * math.cos(math.radians(angle)) + (y2 - y1) * math.sin(math.radians(angle)) + y = y1 + (y2 - y1) * math.cos(math.radians(angle)) - (x2 - x1) * math.sin(math.radians(angle)) + point = (x, y) + # print(point) + return point + + # 直线的缩放,point1是定点 + def zoom(point1, point2, ratio): + x1, y1 = point1[0], point1[1] + x2, y2 = point2[0], point2[1] + x = x1 + (x2 - x1) * ratio + y = y1 + (y2 - y1) * ratio + point = (x, y) + return point + + point3 = rotate(point1, point2, 90) + point4 = rotate(point2, point1, 270) + # print(point1,point2,point3,point4) + # 画正方形 + canvas.create_polygon(point1, point2, point4, point3, fill='LightBlue4', outline='white') + if depth == 0: + return + point = rotate(point3, point4, angle) # 旋转 + point = zoom(point3, point, math.cos(math.radians(angle))) # 缩放 + Rect_tree(depth - 1, point, point4, angle, canvas) # 画左枝 + Rect_tree(depth - 1, point3, point, angle, canvas) # 画右枝 \ No newline at end of file diff --git a/basic.png b/basic.png new file mode 100644 index 0000000..d3cb06a Binary files /dev/null and b/basic.png differ diff --git a/fractaltree.py b/fractaltree.py new file mode 100644 index 0000000..2039bda --- /dev/null +++ b/fractaltree.py @@ -0,0 +1,755 @@ +# -*- coding:utf-8 -*- + +import tkinter as tk +import tkinter.font as tf +import math +import pandas as pd +import pymysql +import os + +# Y形分形 Y_Fractal +# 参数初始化 +FinishLevel_Y = 14 +TreePercent_Y = 0.7 +LeftAngle_Y = 30 +RightAngle_Y = 30 +InitPoint_Y = (420, 500) +InitAngle_Y = 90 +InitLong_Y = 150 + +# Y形分形参数的字符串形式输出 +params_Y = " 分形层数:finishLevel={}\n" \ + " 缩放比例:treePercent={}\n" \ + " 左枝倾角:leftAngle={}\n" \ + " 右枝倾角:rightAngle={}\n" \ + " 初始点:initPoint={}\n" \ + " 初始角:initAngle={}\n" \ + " 初始长度:initLong={}".format(FinishLevel_Y, TreePercent_Y, LeftAngle_Y, RightAngle_Y, + InitPoint_Y, InitAngle_Y, InitLong_Y) + + +# Y形基本图案函数 +def yPattern(): + cv_small.delete("all") # 清除画布 + cv_small.create_line(30, 10, 90, 70, fill='red', width=2) # 左臂 + cv_small.create_line(150, 10, 90, 70, fill='red', width=2) # 右臂 + cv_small.create_line(90, 140, 90, 70, fill='red', width=2) # 中心线 + + +# Y形树执行函数 +def run_Y_tree(): + # Y形分形树函数 + def Y_tree(depth, percent, left_angle, right_angle, start_point, angle, length, canvas): + if depth == 0: + return + end_point = (start_point[0] + length * math.cos(math.radians(angle)), + start_point[1] - length * math.sin(math.radians(angle))) + canvas.create_line(start_point, end_point, fill='LightBlue4', width=2) + # canvas.update() + # canvas.after(1) + Y_tree(depth - 1, percent, left_angle, right_angle, end_point, angle + right_angle, length * percent, + canvas) # 画右枝 + Y_tree(depth - 1, percent, left_angle, right_angle, end_point, angle - left_angle, length * percent, + canvas) # 画左枝 + # print(start_point,end_point) + + # 清除画布 + cv_big.delete("all") + # 将初始参数传入函数 + Y_tree(FinishLevel_Y, TreePercent_Y, LeftAngle_Y, RightAngle_Y, InitPoint_Y, InitAngle_Y, InitLong_Y, cv_big) + output_text.delete("1.0", "end") + # 在底部的结果输出框输出分形树的绘制参数 + text = " 结果输出:<分形绘制参数的字符串形式输出>\n finishLevel={}, treePercent={}," \ + " leftAngle={}, rightAngle={}, initPoint={}, initAngle={}, initLong={}" \ + .format(FinishLevel_Y, TreePercent_Y, LeftAngle_Y, RightAngle_Y, InitPoint_Y, + InitAngle_Y, InitLong_Y) + output_text.insert(tk.INSERT, text) + + +# Y形分形参数更新函数 +def update_params_Y(): + new_str = params_text.get("1.0", "end-1c") # 获取文本框中的分形参数字符串 + new_params = new_str.split('\n') + new_params = [x.split('=')[1].strip() for x in new_params] # 获取参数值 + # 参数更新 + global FinishLevel_Y, TreePercent_Y, LeftAngle_Y, RightAngle_Y, InitPoint_Y, InitAngle_Y, InitLong_Y + FinishLevel_Y = int(new_params[0]) + TreePercent_Y = float(new_params[1]) + LeftAngle_Y = int(new_params[2]) + RightAngle_Y = int(new_params[3]) + InitPoint_Y = tuple(map(int, new_params[4][1:-1].split(','))) + InitAngle_Y = int(new_params[5]) + InitLong_Y = int(new_params[6]) + + +# 三角形分形 Triangle_Fractal +# 参数初始化 +FinishLevel_tri = 14 +TreePercent_tri = 0.7 +InitPoint_tri = (420, 500) +InitAngle_tri = 30 +InitLong_tri = 170 +params_Triangle = " 分形层数:finishLevel={}\n" \ + " 缩放比例:treePercent={}\n" \ + " 初始点:initPoint={}\n" \ + " 初始角:initAngle={}\n" \ + " 初始长度:initLong={}".format(FinishLevel_tri, TreePercent_tri, InitPoint_tri, + InitAngle_tri, InitLong_tri) + + +# 三角形分形参数设置 +def update_params_Triangle(): + new_str = params_text.get("1.0", "end-1c") # 获取文本框中的分形参数字符串 + new_params = new_str.split('\n') + new_params = [x.split('=')[1].strip() for x in new_params] # 获取参数值 + # 参数更新 + global FinishLevel_tri, TreePercent_tri, InitPoint_tri, InitAngle_tri, InitLong_tri + FinishLevel_tri = int(new_params[0]) + TreePercent_tri = float(new_params[1]) + InitPoint_tri = tuple(map(int, new_params[2][1:-1].split(','))) + InitAngle_tri = int(new_params[3]) + InitLong_tri = int(new_params[4]) + + +# 三角形基本图案函数 +def Triangle_Pattern(): + cv_small.delete("all") # 清除画布 + cv_small.create_polygon(80, 130, 20, 10, 140, 10, outline='red', fill='white', width=2) + + +# 三角形分形树执行函数(倒的坐标系) +def run_Triangle_tree(): + # 三角形分形树函数 + def Triangle_tree(depth, percent, start_point, angle, length, canvas): + if depth == 0: + return + # 左枝点 + end_point1 = (start_point[0] - length * math.sin(math.radians(angle)), + start_point[1] - length * math.cos(math.radians(angle))) + # 右枝点 + end_point2 = (start_point[0] + length * math.sin(math.radians(angle)), + start_point[1] - length * math.cos(math.radians(angle))) + # 画三角形 + canvas.create_polygon(start_point, end_point1, end_point2, fill='LightBlue4', outline='white') + # 画左枝 + Triangle_tree(depth - 1, percent, end_point1, angle, length * percent, canvas) + # 画右枝 + Triangle_tree(depth - 1, percent, end_point2, angle, length * percent, canvas) + # canvas.update() + # canvas.after(10) + + # 清除画布 + cv_big.delete("all") + # 将初始参数传入函数 + Triangle_tree(FinishLevel_tri, TreePercent_tri, InitPoint_tri, InitAngle_tri, InitLong_tri, cv_big) + # 在底部的结果输出框输出分形树的绘制参数 + output_text.delete("1.0", "end") + text = " 结果输出:<分形绘制参数的字符串形式输出>\n finishLevel={}, treePercent={}, initPoint={}, initAngle={}, " \ + "initLong={}".format(FinishLevel_tri, TreePercent_tri, InitPoint_tri, + InitAngle_tri, InitLong_tri) + output_text.insert(tk.INSERT, text) + + +# 方形分形 Rect_Fractal +# 参数初始化 +FinishLevel_Rect = 10 +LeftPoint_Rect = (350, 410) +RightPoint_Rect = (450, 410) +InitAngle_Rect = 45 +params_Rect = " 分形层数:finishLevel={}\n" \ + " 左下点:leftPoint={}\n" \ + " 右下点:rightPoint={}\n" \ + " 初始角:initAngle={}".format(FinishLevel_Rect, LeftPoint_Rect, RightPoint_Rect, InitAngle_Rect) + + +# 方形参数更新函数 +def update_params_Rect(): + new_str = params_text.get("1.0", "end-1c") # 获取文本框中的分形参数字符串 + new_params = new_str.split('\n') + new_params = [x.split('=')[1].strip() for x in new_params] # 获取参数值 + # 参数更新 + global FinishLevel_Rect, LeftPoint_Rect, RightPoint_Rect, InitAngle_Rect + FinishLevel_Rect = int(new_params[0]) + LeftPoint_Rect = tuple(map(int, new_params[1][1:-1].split(','))) + RightPoint_Rect = tuple(map(int, new_params[2][1:-1].split(','))) + InitAngle_Rect = int(new_params[3]) + + +# 方形基本图案函数 +def Rect_Pattern(): + cv_small.delete("all") # 清空画布 + cv_small.create_rectangle(35, 10, 155, 120, outline='red', fill='white', width=2) + + +# 方形分形树执行函数 +def run_Rect_tree(): + # 方形分形树函数 + def Rect_tree(depth, point1, point2, angle, canvas): + # 直线的旋转,point1是定点 + def rotate(point1, point2, angle): + x1, y1 = point1[0], point1[1] + x2, y2 = point2[0], point2[1] + x = x1 + (x2 - x1) * math.cos(math.radians(angle)) + (y2 - y1) * math.sin(math.radians(angle)) + y = y1 + (y2 - y1) * math.cos(math.radians(angle)) - (x2 - x1) * math.sin(math.radians(angle)) + point = (x, y) + # print(point) + return point + + # 直线的缩放,point1是定点 + def zoom(point1, point2, ratio): + x1, y1 = point1[0], point1[1] + x2, y2 = point2[0], point2[1] + x = x1 + (x2 - x1) * ratio + y = y1 + (y2 - y1) * ratio + point = (x, y) + return point + + point3 = rotate(point1, point2, 90) + point4 = rotate(point2, point1, 270) + # print(point1,point2,point3,point4) + # 画正方形 + canvas.create_polygon(point1, point2, point4, point3, fill='LightBlue4', outline='white') + if depth == 0: + return + point = rotate(point3, point4, angle) # 旋转 + point = zoom(point3, point, math.cos(math.radians(angle))) # 缩放 + Rect_tree(depth - 1, point, point4, angle, canvas) # 画左枝 + Rect_tree(depth - 1, point3, point, angle, canvas) # 画右枝 + + # 清除画布 + cv_big.delete("all") + # 将初始参数传入函数 + Rect_tree(FinishLevel_Rect, LeftPoint_Rect, RightPoint_Rect, InitAngle_Rect, cv_big) + # 在底部的结果输出框输出分形树的绘制参数 + output_text.delete("1.0", "end") + text = " 结果输出:<分形绘制参数的字符串形式输出>\n finishLevel={}, leftPoint={}, rightPoint={}, initAngle={}" \ + .format(FinishLevel_Rect, LeftPoint_Rect, RightPoint_Rect, InitAngle_Rect) + output_text.insert(tk.INSERT, text) + + +# 按钮【删除选项】的回调函数 +def delete_rb(): + fractal_type = shape_var.get() # 获取用户选择的分形类型 + # 遍历 Frame组件中的所有单选框 + for radio_button in frame.pack_slaves(): + # 如果选中对象是单选框且与单选框的值与 fractal_type相等,删除单选框 + if isinstance(radio_button, tk.Radiobutton) and radio_button["value"] == fractal_type: + radio_button.destroy() + + +# 连接到数据库 +def mysql_chart(table_query): + import mysql.connector + + # 连接到MySQL数据库 + cnx = mysql.connector.connect( + host='localhost', + user='root', + password='123456', + db='ec' + ) + + # 创建游标对象 + cursor = cnx.cursor() + + # 执行SQL语句来创建数据表 + cursor.execute(table_query) + + # 提交事务并关闭连接 + cnx.commit() + cursor.close() + cnx.close() + + +# 建立数据库连接 +def connect_To_database(): + try: + conn = pymysql.connect( + host='localhost', + user='root', + password='123456', + db='ec', + charset='utf8' + ) + # print('连接成功') + return conn + except pymysql.Error as e: + print('连接失败!', e) + + +# 文本框内的参数随着单选框的变化实时更新 +def update_Text(): + params_text.delete(1.0, tk.END) # 清空文本框中的内容 + fractal_type = shape_var.get() # 获取用户选择的分形类型 + # print(fractal_type) + # 根据分形类型在文本框内显示不同的分形参数字符串 + if fractal_type == 'Y': + params_text.insert(tk.INSERT, params_Y) + elif fractal_type == 'Triangle': + params_text.insert(tk.INSERT, params_Triangle) + elif fractal_type == 'Rect': + params_text.insert(tk.INSERT, params_Rect) + # 如果分形类型在分形参数输出字典中,运行相应的代码 + # elif fractal_type in str_params_dict: + # code = str_params_dict[fractal_type] + # exec(code) + conn = pymysql.connect(host='localhost', user='root', password='123456', database='ec') + df = pd.read_sql('select * from fractal', con=conn) + for i in df['fractal_e']: + # print(i) + if fractal_type == i: + code = df[df['fractal_e'] == i].params_initial.values[0] + exec(code) + code1 = df[df['fractal_e'] == i].str_params.values[0] + exec(code1) + conn.close() + + +def Y_pattern(): + cv_small.delete("all") # 清除画布 + cv_small.create_line(50, 30, 110, 90, fill='red', width=2) # 左臂 + cv_small.create_line(170, 30, 110, 90, fill='red', width=2) # 右臂 + cv_small.create_line(110, 160, 110, 90, fill='red', width=2) # 中心线 + + +# 按钮【基本图案绘制】的回调函数 +def draw_pattern(): + fractal_type = shape_var.get() # 获取用户选择的分形类型 + # 根据分形类型 绘制基本图案 + if fractal_type == 'Y': + Y_pattern() + elif fractal_type == 'Triangle': + Triangle_Pattern() + elif fractal_type == 'Rect': + Rect_Pattern() + + # 如果分形类型在基本图案绘制函数字典中,执行相应的代码 + # elif fractal_type in pattern_dict: + # code = pattern_dict[fractal_type] + # exec(code) + conn = pymysql.connect(host='localhost', user='root', password='123456', database='ec') + df = pd.read_sql('select * from fractal', con=conn) + for i in df['fractal_e']: + if fractal_type == i: + code = df[df['fractal_e'] == i].pattern.values[0] + exec(code) + conn.close() + + +# 按钮【绘制】的回调函数 +def draw_tree(): + fractal_type = shape_var.get() # 获取用户选择的分形类型 + # 根据分形类型 绘制分形树 + if fractal_type == 'Y': + run_Y_tree() + elif fractal_type == 'Triangle': + run_Triangle_tree() + elif fractal_type == 'Rect': + run_Rect_tree() + + # 如果分形类型在分形树绘制函数字典中,执行相应的代码 + # elif fractal_type in tree_dict: + # code = tree_dict[fractal_type] + # exec(code) + conn = pymysql.connect(host='localhost', user='root', password='123456', database='ec') + df = pd.read_sql('select * from fractal', con=conn) + for i in df['fractal_e']: + if fractal_type == i: + code = df[df['fractal_e'] == i].tree.values[0] + exec(code) + conn.close() + + +# 按钮【绘制参数设置】的回调函数 +def update_params(): + fractal_type = shape_var.get() # 获取用户选择的分形类型 + # 根据分形类型 执行对应的参数更新函数 + if fractal_type == 'Y': + update_params_Y() + elif fractal_type == 'Triangle': + update_params_Triangle() + elif fractal_type == 'Rect': + update_params_Rect() + + # 如果分形类型在参数更新字典中,运行相应的代码 + # if fractal_type in update_params_dict: + # code = update_params_dict[fractal_type] + # exec(code) + conn = pymysql.connect(host='localhost', user='root', password='123456', database='ec') + df = pd.read_sql('select * from fractal', con=conn) + for i in df['fractal_e']: + if fractal_type == i: + code = df[df['fractal_e'] == i].updata_tree.values[0] + exec(code) + conn.close() + + +# 按钮【新增分形图案类型】的回调函数 +def add_fractal(): + # 按钮【添加】的回调函数,将分形图案对应的函数模块增加到相关字典 + def add_function(): + # 获取分形名称,更改单选框名字 + name_fractal = text_name.get('1.0', 'end-1c') # 文本框控件中第一个字符的位置是 1.0,'end-1c'返回的输入中不包含换行符 + # print(name_fractal) + # 获取分形单选框的值 + fractal_type = text_radio.get('1.0', 'end-1c') + # print(fractal_type) + # 创建单选框 + rb = tk.Radiobutton(frame, text=name_fractal, variable=shape_var, value=fractal_type, bg="white", font=ft1) + rb.pack(anchor='w') + + # 执行参数初始化的代码 + params_code = text_param.get('1.0', 'end-1c') + # exec(params_code) + global str_params_dict, pattern_dict, tree_dict, update_params_dict + # 分形参数输出字典 + str_code = text_str.get('1.0', 'end-1c') + str_params_dict[fractal_type] = str_code + # 基本图案绘制函数字典 + pattern_code = text_pattern.get('1.0', 'end-1c') + # pattern_dict[fractal_type] = pattern_code + # 分形树绘制函数字典 + tree_code = text_tree.get('1.0', 'end-1c') + # tree_dict[fractal_type] = tree_code + # 参数更新字典 + update_code = text_up.get('1.0', 'end-1c') + # update_params_dict[fractal_type] = update_code + + # 添加后关闭窗口 + small_root2.destroy() + + list1 = [(name_fractal, fractal_type, params_code, str_code, pattern_code, tree_code, update_code)] + conn = pymysql.connect(host='localhost', user='root', password='123456', database='ec') + insert_query = "insert into fractal (name,fractal_e,params_initial,str_params,pattern,tree,updata_tree) " \ + "values (%s,%s,%s,%s,%s,%s,%s)" + + tree.insert_data(conn, insert_query, list1[0]) + + # 弹出一个添加分形代码的窗口 + small_root2 = tk.Tk() + small_root2.geometry("1000x700+200+50") + small_root2.title("新增分形图案类型") + # 分形名称,读取为单选框的名字 + lab_name = tk.Label(small_root2, text="分形名称:", font=ft1) + lab_name.place(x=40, y=10, width=100, height=30, anchor='nw') + text_name = tk.Text(small_root2, highlightthickness=1, highlightbackground="LightBlue") + text_name.configure(font=ft3) + text_name.place(x=140, y=10, width=340, height=30) + # 分形单选框的值,读取为单选框的值 + lab_radio = tk.Label(small_root2, text="分形英文简写:", font=ft1) + lab_radio.place(x=520, y=10, width=140, height=30, anchor='nw') + text_radio = tk.Text(small_root2, highlightthickness=1, highlightbackground="LightBlue") + text_radio.configure(font=ft3) + text_radio.place(x=660, y=10, width=300, height=30) + # 分形参数初始化,读取的代码可以直接运行 + lab_param = tk.Label(small_root2, text="请输入分形参数初始化的代码:", font=ft1) + lab_param.place(x=40, y=50, width=280, height=30, anchor='nw') + text_param = tk.Text(small_root2, highlightthickness=1, highlightbackground="LightBlue") + text_param.configure(font=ft3, spacing1=5) + text_param.place(x=40, y=85, width=440, height=140) + # 分形参数字符串形式输出,后续读取代码到分形参数输出字典str_params_dict + lab_str = tk.Label(small_root2, text="请输入分形参数字符串形式输出的代码:", font=ft1) + lab_str.place(x=40, y=230, width=360, height=30, anchor='nw') + text_str = tk.Text(small_root2, highlightthickness=1, highlightbackground="LightBlue") + text_str.configure(font=ft3, spacing1=5) + text_str.place(x=40, y=265, width=440, height=140) + # print(text_str) + # 参数更新,后续读取代码到参数更新字典update_params_dict + lab_up = tk.Label(small_root2, text="请输入分形参数更新的代码:", font=ft1) + lab_up.place(x=40, y=410, width=260, height=30, anchor='nw') + text_up = tk.Text(small_root2, highlightthickness=1, highlightbackground="LightBlue") + text_up.configure(font=ft3, spacing1=5) + text_up.place(x=40, y=445, width=440, height=145) + # 输入基本图案函数,后续读取代码到基本图案绘制函数字典pattern_dict + lab_pattern = tk.Label(small_root2, text="请输入基本图案绘制函数:", font=ft1) + lab_pattern.place(x=520, y=50, width=240, height=30, anchor='nw') + text_pattern = tk.Text(small_root2, highlightthickness=1, highlightbackground="LightBlue") + text_pattern.configure(font=ft3, spacing1=5) + text_pattern.place(x=520, y=85, width=440, height=240) + # 输入分形树函数,后续读取代码到分形树绘制函数字典tree_dict + lab_tree = tk.Label(small_root2, text="请输入分形树绘制函数:", font=ft1) + lab_tree.place(x=520, y=330, width=220, height=30, anchor='nw') + text_tree = tk.Text(small_root2, highlightthickness=1, highlightbackground="LightBlue") + text_tree.configure(font=ft3, spacing1=5) + text_tree.place(x=520, y=365, width=440, height=230) + # 按钮【添加】 + button_add = tk.Button(small_root2, text="添加", command=add_function, font=ft2) + button_add.place(x=450, y=610, width=100, height=35, anchor='nw') + + +def main(): + # 创建主窗口 + root = tk.Tk() + w = root.winfo_screenwidth() + h = root.winfo_screenheight() + root.geometry("%dx%d" % (w, h)) + root.title("分形树 电脑的分辨率是%dx%d" % (root.winfo_screenwidth(), root.winfo_screenheight())) + root.geometry('1270x650') + root.title('分形树') + + # 创建新增分形图案类型所需的字典 + str_params_dict = {} + pattern_dict = {} + tree_dict = {} + update_params_dict = {} + + # 定义变量,用于存储用户选择的分形类型 + shape_var = tk.StringVar() + + # 设置字体 + ft1 = tf.Font(family="黑体", size=21) + ft2 = tf.Font(family="黑体", size=21, weight=tf.BOLD) + ft3 = tf.Font(family="黑体", size=18) + ft4 = tf.Font(family="黑体", size=19) + + # 创建一个标签 + lab1 = tk.Label(root, text="分形图案类型", font=ft1) + lab1.place(x=20, y=10, width=180, height=50, anchor='nw') + + # 创建一个按钮,用来新增分形图案类型 + button_addPattern = tk.Button(root, text="新增分形图案类型", command=add_fractal, font=ft2) + button_addPattern.place(x=500, y=10, width=270, height=50, anchor='ne') + + ## 滚动框的设置 + # 创建一个Canvas对象,使用该对象作为滚动区域 + canvas = tk.Canvas(root, width=445, height=160) + + # 创建一个列表框对象Rlist,并将其放入滚动区域中 + Rlist = tk.Listbox(canvas, width=445, height=20, bg='white', highlightthickness=1, highlightbackground="LightBlue") + + # 创建滚动条对象并与Canvas绑定,实现滚动条功能 + scrollbar = tk.Scrollbar(root, orient="vertical", command=canvas.yview) + canvas.configure(yscrollcommand=scrollbar.set) + + canvas.place(x=20, y=75, anchor='nw') + scrollbar.place(x=470, y=75, width=30, height=160, anchor='nw') + + # 创建一个Frame组件用于放置单选框 + frame = tk.Frame(Rlist, bg='white') + frame.place(anchor='nw') + + # 将列表框放入Canvas中,并设置Canvas窗口的大小 + box_id = canvas.create_window((0, 0), window=Rlist, anchor="nw") + Rlist.update_idletasks() # 更新视图 + canvas.config(scrollregion=canvas.bbox("all")) # 设置画布的滚动区域 + + # 添加单选框到 Frame组件 + rb_Y = tk.Radiobutton(frame, text="Y形分形 Y_Fractal", variable=shape_var, value='Y', bg="white", font=ft1) + rb_Y.pack(anchor='w') + rb_Triangle = tk.Radiobutton(frame, text="三角形分形 Triangle_Fractal", variable=shape_var, value='Triangle', + bg="white", font=ft1) + rb_Triangle.pack(anchor='w') + rb_Rect = tk.Radiobutton(frame, text="矩形分形 Rect_Fractal", variable=shape_var, value='Rect', bg="white", + font=ft1) + rb_Rect.pack(anchor='w') + + if os.path.exists('params.csv'): + df = pd.read_csv("params.csv") + for i in df["分型名称"]: + rb1 = tk.Radiobutton(frame, text=i, variable=shape_var, value=df[df['分型名称'] == i].分形英文.values[0], + bg="white", font=ft1) + rb1.pack(anchor='w') + + # 将默认选项设置为 Y 形分形 + rb_Y.select() + + # 创建一个标签 + lab2 = tk.Label(root, text="分形参数设置【参数含义:参量名=参量值】", font=ft4) + lab2.place(x=20, y=255, width=490, height=40, anchor='nw') + + # 大画布的宽度和高度变量,方便后期调整 + big_width = 880 + big_height = 690 + + # 创建蓝色边框的大画布 + cv_big = tk.Canvas(root, bg="white", highlightthickness=1, highlightbackground="LightBlue") + cv_big.config(width=big_width, height=big_height) + cv_big.place(x=530, y=10, anchor='nw') + + # 创建红色边框的小画布,宽高设置为大画布的1/4 + cv_small = tk.Canvas(cv_big, bg="white", highlightthickness=1, highlightbackground="tomato") + cv_small.config(width=big_width * 0.25, height=big_height * 0.25) + cv_small.place(x=0, y=big_height, anchor='sw') + + # 创建一个多行文本框 + params_text = tk.Text(root, bg="white", highlightthickness=1, highlightbackground="LightBlue") + params_text.configure(font=ft3, spacing1=15) + params_text.place(x=20, y=300, width=480, height=310, anchor='nw') + + # 初始化分形参数并输出 + params_str = params_Y + params_text.insert(tk.INSERT, params_str) + + # trace追踪变量w模式,回调函数update_text + shape_var.trace('w', lambda *args, str_params_dict=str_params_dict: update_Text()) + + # 创建四个按钮 + button_delete = tk.Button(root, text="删除\n选项", command=delete_rb, font=ft2) + button_delete.place(x=20, y=700, width=90, height=75, anchor='sw') + button_pattern = tk.Button(root, text="基本图\n案绘制", command=draw_pattern, font=ft2) + button_pattern.place(x=130, y=700, width=120, height=75, anchor='sw') + button_params = tk.Button(root, text="绘制参\n数设置", command=update_params, font=ft2) + button_params.place(x=270, y=700, width=120, height=75, anchor='sw') + button_drawTree = tk.Button(root, text="绘制", command=draw_tree, font=ft2) + button_drawTree.place(x=410, y=700, width=90, height=75, anchor='sw') + + # 创建底部输出框 + output_text = tk.Text(root, bg="white", highlightthickness=1, highlightbackground="LightBlue") + output_text.configure(font=ft3, spacing1=8) + text = " 结果输出:<分形绘制参数的字符串形式输出>" + output_text.insert(tk.INSERT, text) + output_text.place(x=20, y=800, width=1390, height=80, anchor='sw') + + # 进入消息循环 + root.mainloop() + + +if __name__ == '__main__': + from pycallgraph2 import PyCallGraph + from pycallgraph2.output import GraphvizOutput + from pycallgraph2 import Config + from pycallgraph2 import GlobbingFilter + + output = GraphvizOutput(font_size=30) + output.output_file = "basic.png" + output.group_font_size = 40 + config = Config() + # config.trace_filter = GlobbingFilter(include=[ + # 'update_params_Triangle.*', + # 'yPattern.*', + # 'Rect_Pattern.*', + # 'run_Rect_tree.*', + # 'delete_rb.*', + # 'mysql_Text.*', + # 'Y_pattern.*', + # 'draw_pattern.*', + # 'draw_tree.*', + # 'update_params.*', + # 'add_fractal.*', + # 'main.*', + # ]) + with PyCallGraph(output=output, config=config): + # 创建主窗口 + root = tk.Tk() + w = root.winfo_screenwidth() + h = root.winfo_screenheight() + root.geometry("%dx%d" % (w, h)) + root.title("分形树 电脑的分辨率是%dx%d" % (root.winfo_screenwidth(), root.winfo_screenheight())) + root.geometry('1270x650') + root.title('分形树') + + # 创建新增分形图案类型所需的字典 + str_params_dict = {} + pattern_dict = {} + tree_dict = {} + update_params_dict = {} + + # 定义变量,用于存储用户选择的分形类型 + shape_var = tk.StringVar() + + # 设置字体 + ft1 = tf.Font(family="黑体", size=21) + ft2 = tf.Font(family="黑体", size=21, weight=tf.BOLD) + ft3 = tf.Font(family="黑体", size=18) + ft4 = tf.Font(family="黑体", size=19) + + # 创建一个标签 + lab1 = tk.Label(root, text="分形图案类型", font=ft1) + lab1.place(x=20, y=10, width=180, height=50, anchor='nw') + + # 创建一个按钮,用来新增分形图案类型 + button_addPattern = tk.Button(root, text="新增分形图案类型", command=add_fractal, font=ft2) + button_addPattern.place(x=500, y=10, width=270, height=50, anchor='ne') + + ## 滚动框的设置 + # 创建一个Canvas对象,使用该对象作为滚动区域 + canvas = tk.Canvas(root, width=445, height=160) + + # 创建一个列表框对象Rlist,并将其放入滚动区域中 + Rlist = tk.Listbox(canvas, width=445, height=20, bg='white', highlightthickness=1, highlightbackground="LightBlue") + + # 创建滚动条对象并与Canvas绑定,实现滚动条功能 + scrollbar = tk.Scrollbar(root, orient="vertical", command=canvas.yview) + canvas.configure(yscrollcommand=scrollbar.set) + + canvas.place(x=20, y=75, anchor='nw') + scrollbar.place(x=470, y=75, width=30, height=160, anchor='nw') + + # 创建一个Frame组件用于放置单选框 + frame = tk.Frame(Rlist, bg='white') + frame.place(anchor='nw') + + # 将列表框放入Canvas中,并设置Canvas窗口的大小 + box_id = canvas.create_window((0, 0), window=Rlist, anchor="nw") + Rlist.update_idletasks() # 更新视图 + canvas.config(scrollregion=canvas.bbox("all")) # 设置画布的滚动区域 + + # 添加单选框到 Frame组件 + rb_Y = tk.Radiobutton(frame, text="Y形分形 Y_Fractal", variable=shape_var, value='Y', bg="white", font=ft1) + rb_Y.pack(anchor='w') + rb_Triangle = tk.Radiobutton(frame, text="三角形分形 Triangle_Fractal", variable=shape_var, value='Triangle', + bg="white", font=ft1) + rb_Triangle.pack(anchor='w') + rb_Rect = tk.Radiobutton(frame, text="矩形分形 Rect_Fractal", variable=shape_var, value='Rect', bg="white", + font=ft1) + rb_Rect.pack(anchor='w') + + if os.path.exists('params.csv'): + df = pd.read_csv("params.csv") + for i in df["分型名称"]: + rb1 = tk.Radiobutton(frame, text=i, variable=shape_var, value=df[df['分型名称'] == i].分形英文.values[0], + bg="white", font=ft1) + rb1.pack(anchor='w') + + # 将默认选项设置为 Y 形分形 + rb_Y.select() + + # 创建一个标签 + lab2 = tk.Label(root, text="分形参数设置【参数含义:参量名=参量值】", font=ft4) + lab2.place(x=20, y=255, width=490, height=40, anchor='nw') + + # 大画布的宽度和高度变量,方便后期调整 + big_width = 880 + big_height = 690 + + # 创建蓝色边框的大画布 + cv_big = tk.Canvas(root, bg="white", highlightthickness=1, highlightbackground="LightBlue") + cv_big.config(width=big_width, height=big_height) + cv_big.place(x=530, y=10, anchor='nw') + + # 创建红色边框的小画布,宽高设置为大画布的1/4 + cv_small = tk.Canvas(cv_big, bg="white", highlightthickness=1, highlightbackground="tomato") + cv_small.config(width=big_width * 0.25, height=big_height * 0.25) + cv_small.place(x=0, y=big_height, anchor='sw') + + # 创建一个多行文本框 + params_text = tk.Text(root, bg="white", highlightthickness=1, highlightbackground="LightBlue") + params_text.configure(font=ft3, spacing1=15) + params_text.place(x=20, y=300, width=480, height=310, anchor='nw') + + # 初始化分形参数并输出 + params_str = params_Y + params_text.insert(tk.INSERT, params_str) + + # trace追踪变量w模式,回调函数update_text + shape_var.trace('w', lambda *args, str_params_dict=str_params_dict: update_Text()) + + # 创建四个按钮 + button_delete = tk.Button(root, text="删除\n选项", command=delete_rb, font=ft2) + button_delete.place(x=20, y=700, width=90, height=75, anchor='sw') + button_pattern = tk.Button(root, text="基本图\n案绘制", command=draw_pattern, font=ft2) + button_pattern.place(x=130, y=700, width=120, height=75, anchor='sw') + button_params = tk.Button(root, text="绘制参\n数设置", command=update_params, font=ft2) + button_params.place(x=270, y=700, width=120, height=75, anchor='sw') + button_drawTree = tk.Button(root, text="绘制", command=draw_tree, font=ft2) + button_drawTree.place(x=410, y=700, width=90, height=75, anchor='sw') + + # 创建底部输出框 + output_text = tk.Text(root, bg="white", highlightthickness=1, highlightbackground="LightBlue") + output_text.configure(font=ft3, spacing1=8) + text = " 结果输出:<分形绘制参数的字符串形式输出>" + output_text.insert(tk.INSERT, text) + output_text.place(x=20, y=800, width=1390, height=80, anchor='sw') + + # 进入消息循环 + root.mainloop() diff --git a/tree_mysql.py b/tree_mysql.py new file mode 100644 index 0000000..dc3142f --- /dev/null +++ b/tree_mysql.py @@ -0,0 +1,44 @@ +import pymysql + + +# 建立数据库连接 +def connect_To_database(): + try: + conn = pymysql.connect( + host='localhost', + user='root', + password='cyh0110', + db='ec', + charset='utf8' + ) + # print('连接成功') + return conn + except pymysql.Error as e: + print('连接失败!', e) + + +def insert_data(conn, insert_query, list_code): + # 创建游标 + cursor = conn.cursor() + # # 创建表 + # new_tree_code = ''' + # create table if not exists fractal( + # id int AUTO_INCREMENT primary key, + # name TEXT, + # fractal_e TEXT, + # params_initial TEXT, + # str_params TEXT, + # pattern TEXT, + # tree TEXT, + # update_tree TEXT) + # ''' + # cursor.execute(new_tree_code) + + # 执行插入语句 + cursor.execute(insert_query, list_code) + + conn.commit() + # 关闭数据库 + conn.close() + # 关闭游标 + cursor.close() diff --git a/关系调用图.jpg b/关系调用图.jpg new file mode 100644 index 0000000..02667aa Binary files /dev/null and b/关系调用图.jpg differ