Python使用tkinter库开发图形可视化工具的完整代码指南
很多时候,我们希望有一个程序,能够直接设置不同的参数,就显示这个图形的效果,基于这样的目的,今天我们设计开发一个基于python的tkinter库的一个图形可视化程序。这个应用程序实现了一个图形可视化工具,它具有以下特点:
- 菜单栏包含了 5 种图形类型:饼图、柱状图、折线图、散点图和直方图
- 每个图形都有独立的参数设置界面,可以自定义标题、标签、颜色等属性
- 可以实时预览图形效果,点击 "生成图形" 按钮更新显示
- 提供 "重置参数" 按钮,方便恢复默认设置
- 界面美观,布局合理,支持中文显示
以下是一个实现了的界面效果:

你可以运行这个程序,通过菜单选择不同的图形类型,然后在左侧设置参数,右侧就会实时显示图形效果。
接下来,我们将详细讲解这个程序是如何实现的:
这个图形可视化工具基于 Python 的 tkinter 和 matplotlib 库开发,提供了一个直观的界面来创建和定制不同类型的图形。下面我将详细解释代码的各个部分。
1. 导入必要的库
有关tkinter库的内容,可以看我的CSDN文章:基于Python的tkinter库创建图形用户界面-CSDN博客
import tkinter as tk
from tkinter import ttk, messagebox, scrolledtext
import matplotlib.pyplot as plt
from matplotlib.backends.backend_tkagg import FigureCanvasTkAgg
import numpy as np
import random
# 设置matplotlib支持中文显示
plt.rcParams["font.family"] = ["SimHei", "WenQuanYi Micro Hei", "Heiti TC"]
plt.rcParams["axes.unicode_minus"] = False # 解决负号显示问题
代码说明:
其中tkinter是python的标准库,不需要安装,matplotlib、numpy是需要安装的,在CMD中安装即可。命令如下:
pip install matplotlib numpy -i https://pypi.tuna.tsinghua.edu.cn/simple
2. 主应用类 GraphVisualizerApp
包好了GraphVisualizerApp类的初始化函数,实例化时设定窗体的标题、窗口大小,创建菜单栏、主框架,以及默认的首界面信息。采用pack的布局方式。
class GraphVisualizerApp:
def __init__(self, root):
self.root = root
self.root.title("图形可视化工具")
self.root.geometry("1000x600")
# 创建菜单栏
self.create_menu()
# 创建主框架
self.main_frame = ttk.Frame(root)
self.main_frame.pack(fill=tk.BOTH, expand=True, padx=10, pady=10)
# 创建参数设置区域和图形显示区域
self.setup_layout()
# 默认显示饼图
self.current_graph_type = "pie"
self.show_pie_chart()
代码说明:
3. 菜单栏创建
菜单中,包含三个菜单,第一个菜单显示“图形类型”,里面不同图形的子菜单。以及“关于”和“退出”两个一级菜单。
def create_menu(self):
menubar = tk.Menu(self.root)
graph_menu = tk.Menu(menubar, tearoff=0)
graph_menu.add_command(label="饼图", command=self.show_pie_chart)
graph_menu.add_command(label="柱状图", command=self.show_bar_chart)
graph_menu.add_command(label="折线图", command=self.show_line_chart)
graph_menu.add_command(label="散点图", command=self.show_scatter_chart)
graph_menu.add_command(label="直方图", command=self.show_histogram)
menubar.add_cascade(label="图形类型", menu=graph_menu)
menubar.add_command(label="关于", command=self.show_about)
menubar.add_command(label="退出", command=self.root.quit)
self.root.config(menu=menubar)
代码说明:
4. 界面布局设置
setup_layout()函数是框架函数,创建框架以及对框架进行布局。
def setup_layout(self):
# 创建左右框架
left_frame = ttk.LabelFrame(self.main_frame, text="参数设置")
left_frame.pack(side=tk.LEFT, fill=tk.BOTH, expand=False, padx=5, pady=5)
right_frame = ttk.LabelFrame(self.main_frame, text="图形显示")
right_frame.pack(side=tk.RIGHT, fill=tk.BOTH, expand=True, padx=5, pady=5)
# 参数设置区域
self.param_frame = ttk.Frame(left_frame)
self.param_frame.pack(fill=tk.BOTH, expand=True, padx=5, pady=5)
# 图形显示区域
self.figure = plt.figure(figsize=(6, 5), dpi=100)
self.canvas = FigureCanvasTkAgg(self.figure, master=right_frame)
self.canvas.get_tk_widget().pack(fill=tk.BOTH, expand=True)
# 按钮区域
btn_frame = ttk.Frame(left_frame)
btn_frame.pack(fill=tk.X, padx=5, pady=5)
ttk.Button(btn_frame, text="生成图形", command=self.generate_graph).pack(side=tk.LEFT, padx=5)
ttk.Button(btn_frame, text="重置参数", command=self.reset_params).pack(side=tk.LEFT, padx=5)
代码说明:
FigureCanvasTkAgg将 matplotlib 图形嵌入 tkinter 窗口。修改参数后,点击“生成图形”,新的图形在右侧显示:

点击“重置参数”,恢复默认的效果。
5. 图形参数设置界面
以饼图为例:

以下是实现饼图的函数:
def show_pie_chart(self):
self.current_graph_type = "pie"
self.clear_param_frame() # 清除现有控件
ttk.Label(self.param_frame, text="数据标签(用逗号分隔):").grid(row=0, column=0, sticky=tk.W, pady=5)
self.pie_labels = ttk.Entry(self.param_frame, width=30)
self.pie_labels.insert(0, "A,B,C,D,E")
self.pie_labels.grid(row=0, column=1, pady=5)
ttk.Label(self.param_frame, text="数据值(用逗号分隔):").grid(row=1, column=0, sticky=tk.W, pady=5)
self.pie_values = ttk.Entry(self.param_frame, width=30)
self.pie_values.insert(0, "15,30,45,10,20")
self.pie_values.grid(row=1, column=1, pady=5)
# ... 其他参数设置 ...
self.generate_graph() # 生成默认图形
代码说明:
clear_param_frame()清除旧参数控件,避免重叠。6. 图形生成函数
设置参数后,要重新生成图形,并使用FigureCanvasTkAgg将新的matplotlib 图形嵌入 tkinter 窗口显示在右侧。以下是生成图形的函数:
def generate_graph(self):
self.figure.clear()
try:
if self.current_graph_type == "pie":
labels = self.pie_labels.get().split(',')
values = [float(x) for x in self.pie_values.get().split(',')]
title = self.pie_title.get()
show_percent = self.pie_show_percent.get()
ax = self.figure.add_subplot(111)
ax.pie(values, labels=labels, autopct='%1.1f%%' if show_percent else None, startangle=90)
ax.axis('equal')
ax.set_title(title)
elif self.current_graph_type == "bar":
# 柱状图生成代码...
# ... 其他图形类型 ...
self.figure.tight_layout()
self.canvas.draw()
except Exception as e:
messagebox.showerror("错误", f"生成图形时出错: {str(e)}")
代码说明:
try-except捕获可能的参数错误,提供友好的错误提示。7. 重置参数和关于对话框
def reset_params(self):
# 根据当前图形类型重置对应参数
# 例如:
if self.current_graph_type == "pie":
self.pie_labels.delete(0, tk.END)
self.pie_labels.insert(0, "A,B,C,D,E")
# ... 重置其他参数 ...
self.generate_graph()
def show_about(self):
messagebox.showinfo("关于", "图形可视化工具 v1.0\n\n支持饼图、柱状图、折线图、散点图和直方图等多种图形类型。")
代码说明:

8. 程序入口
if __name__ == "__main__":
root = tk.Tk()
app = GraphVisualizerApp(root)
root.mainloop()
代码说明:
9.使用说明
- 运行程序后,默认显示饼图界面。
- 通过菜单栏选择不同图形类型(饼图、柱状图等)。
- 在左侧参数设置区修改图形参数。
- 点击 "生成图形" 按钮更新右侧图形。
- 点击 "重置参数" 恢复默认设置。
有多种图形类型:

10.完整代码
import tkinter as tk
from tkinter import ttk, messagebox, scrolledtext
import matplotlib.pyplot as plt
from matplotlib.backends.backend_tkagg import FigureCanvasTkAgg
import numpy as np
import random
# 设置matplotlib支持中文显示
plt.rcParams["font.family"] = ["SimHei", "WenQuanYi Micro Hei", "Heiti TC"]
plt.rcParams["axes.unicode_minus"] = False # 解决负号显示问题
class GraphVisualizerApp:
def __init__(self, root):
self.root = root
self.root.title("图形可视化工具")
self.root.geometry("1000x600")
# 创建菜单栏
self.create_menu()
# 创建主框架
self.main_frame = ttk.Frame(root)
self.main_frame.pack(fill=tk.BOTH, expand=True, padx=10, pady=10)
# 创建参数设置区域和图形显示区域
self.setup_layout()
# 默认显示饼图
self.current_graph_type = "pie"
self.show_pie_chart()
def create_menu(self):
"""创建菜单栏"""
menubar = tk.Menu(self.root)
# 创建"图形类型"菜单
graph_menu = tk.Menu(menubar, tearoff=0)
graph_menu.add_command(label="饼图", command=self.show_pie_chart)
graph_menu.add_command(label="柱状图", command=self.show_bar_chart)
graph_menu.add_command(label="折线图", command=self.show_line_chart)
graph_menu.add_command(label="散点图", command=self.show_scatter_chart)
graph_menu.add_command(label="直方图", command=self.show_histogram)
menubar.add_cascade(label="图形类型", menu=graph_menu)
menubar.add_command(label="关于", command=self.show_about)
menubar.add_command(label="退出", command=self.root.quit)
self.root.config(menu=menubar)
def setup_layout(self):
"""设置界面布局"""
# 创建左右框架
left_frame = ttk.LabelFrame(self.main_frame, text="参数设置")
left_frame.pack(side=tk.LEFT, fill=tk.BOTH, expand=False, padx=5, pady=5)
right_frame = ttk.LabelFrame(self.main_frame, text="图形显示")
right_frame.pack(side=tk.RIGHT, fill=tk.BOTH, expand=True, padx=5, pady=5)
# 参数设置区域 - 使用一个框架作为容器
self.param_frame = ttk.Frame(left_frame)
self.param_frame.pack(fill=tk.BOTH, expand=True, padx=5, pady=5)
# 图形显示区域
self.figure = plt.figure(figsize=(6, 5), dpi=100)
self.canvas = FigureCanvasTkAgg(self.figure, master=right_frame)
self.canvas.get_tk_widget().pack(fill=tk.BOTH, expand=True)
# 按钮区域
btn_frame = ttk.Frame(left_frame)
btn_frame.pack(fill=tk.X, padx=5, pady=5)
ttk.Button(btn_frame, text="生成图形", command=self.generate_graph).pack(side=tk.LEFT, padx=5)
ttk.Button(btn_frame, text="重置参数", command=self.reset_params).pack(side=tk.LEFT, padx=5)
def clear_param_frame(self):
"""清除参数设置区域的所有控件"""
for widget in self.param_frame.winfo_children():
widget.destroy()
def show_pie_chart(self):
"""显示饼图设置界面"""
self.current_graph_type = "pie"
self.clear_param_frame()
self.root.title("图形可视化工具 - 饼图")
ttk.Label(self.param_frame, text="数据标签(用逗号分隔):").grid(row=0, column=0, sticky=tk.W, pady=5)
self.pie_labels = ttk.Entry(self.param_frame, width=30)
self.pie_labels.insert(0, "A,B,C,D,E")
self.pie_labels.grid(row=0, column=1, pady=5)
ttk.Label(self.param_frame, text="数据值(用逗号分隔):").grid(row=1, column=0, sticky=tk.W, pady=5)
self.pie_values = ttk.Entry(self.param_frame, width=30)
self.pie_values.insert(0, "15,30,45,10,20")
self.pie_values.grid(row=1, column=1, pady=5)
ttk.Label(self.param_frame, text="标题:").grid(row=2, column=0, sticky=tk.W, pady=5)
self.pie_title = ttk.Entry(self.param_frame, width=30)
self.pie_title.insert(0, "饼图示例")
self.pie_title.grid(row=2, column=1, pady=5)
ttk.Label(self.param_frame, text="是否显示百分比:").grid(row=3, column=0, sticky=tk.W, pady=5)
self.pie_show_percent = tk.BooleanVar(value=True)
ttk.Checkbutton(self.param_frame, variable=self.pie_show_percent).grid(row=3, column=1, sticky=tk.W, pady=5)
# 生成默认图形
self.generate_graph()
def show_bar_chart(self):
"""显示柱状图设置界面"""
self.current_graph_type = "bar"
self.clear_param_frame()
self.root.title("图形可视化工具 - 柱状图")
ttk.Label(self.param_frame, text="X轴标签(用逗号分隔):").grid(row=0, column=0, sticky=tk.W, pady=5)
self.bar_labels = ttk.Entry(self.param_frame, width=30)
self.bar_labels.insert(0, "一月,二月,三月,四月,五月")
self.bar_labels.grid(row=0, column=1, pady=5)
ttk.Label(self.param_frame, text="Y轴值(用逗号分隔):").grid(row=1, column=0, sticky=tk.W, pady=5)
self.bar_values = ttk.Entry(self.param_frame, width=30)
self.bar_values.insert(0, "65,70,80,90,85")
self.bar_values.grid(row=1, column=1, pady=5)
ttk.Label(self.param_frame, text="标题:").grid(row=2, column=0, sticky=tk.W, pady=5)
self.bar_title = ttk.Entry(self.param_frame, width=30)
self.bar_title.insert(0, "柱状图示例")
self.bar_title.grid(row=2, column=1, pady=5)
ttk.Label(self.param_frame, text="X轴标签:").grid(row=3, column=0, sticky=tk.W, pady=5)
self.bar_xlabel = ttk.Entry(self.param_frame, width=30)
self.bar_xlabel.insert(0, "月份")
self.bar_xlabel.grid(row=3, column=1, pady=5)
ttk.Label(self.param_frame, text="Y轴标签:").grid(row=4, column=0, sticky=tk.W, pady=5)
self.bar_ylabel = ttk.Entry(self.param_frame, width=30)
self.bar_ylabel.insert(0, "数值")
self.bar_ylabel.grid(row=4, column=1, pady=5)
# 生成默认图形
self.generate_graph()
def show_line_chart(self):
"""显示折线图设置界面"""
self.current_graph_type = "line"
self.clear_param_frame()
self.root.title("图形可视化工具 - 折线图")
ttk.Label(self.param_frame, text="X轴数据(用逗号分隔):").grid(row=0, column=0, sticky=tk.W, pady=5)
self.line_x = ttk.Entry(self.param_frame, width=30)
self.line_x.insert(0, "1,2,3,4,5,6,7")
self.line_x.grid(row=0, column=1, pady=5)
ttk.Label(self.param_frame, text="Y轴数据(用逗号分隔):").grid(row=1, column=0, sticky=tk.W, pady=5)
self.line_y = ttk.Entry(self.param_frame, width=30)
self.line_y.insert(0, "65,59,80,81,56,55,70")
self.line_y.grid(row=1, column=1, pady=5)
ttk.Label(self.param_frame, text="标题:").grid(row=2, column=0, sticky=tk.W, pady=5)
self.line_title = ttk.Entry(self.param_frame, width=30)
self.line_title.insert(0, "折线图示例")
self.line_title.grid(row=2, column=1, pady=5)
ttk.Label(self.param_frame, text="X轴标签:").grid(row=3, column=0, sticky=tk.W, pady=5)
self.line_xlabel = ttk.Entry(self.param_frame, width=30)
self.line_xlabel.insert(0, "X轴")
self.line_xlabel.grid(row=3, column=1, pady=5)
ttk.Label(self.param_frame, text="Y轴标签:").grid(row=4, column=0, sticky=tk.W, pady=5)
self.line_ylabel = ttk.Entry(self.param_frame, width=30)
self.line_ylabel.insert(0, "Y轴")
self.line_ylabel.grid(row=4, column=1, pady=5)
ttk.Label(self.param_frame, text="线条颜色:").grid(row=5, column=0, sticky=tk.W, pady=5)
self.line_color = ttk.Combobox(self.param_frame, values=["blue", "red", "green", "black", "purple"], width=27)
self.line_color.current(0)
self.line_color.grid(row=5, column=1, pady=5)
# 生成默认图形
self.generate_graph()
def show_scatter_chart(self):
"""显示散点图设置界面"""
self.current_graph_type = "scatter"
self.clear_param_frame()
self.root.title("图形可视化工具 - 散点图")
ttk.Label(self.param_frame, text="X轴数据(用逗号分隔):").grid(row=0, column=0, sticky=tk.W, pady=5)
self.scatter_x = ttk.Entry(self.param_frame, width=30)
self.scatter_x.insert(0, "1,2,3,4,5,6,7")
self.scatter_x.grid(row=0, column=1, pady=5)
ttk.Label(self.param_frame, text="Y轴数据(用逗号分隔):").grid(row=1, column=0, sticky=tk.W, pady=5)
self.scatter_y = ttk.Entry(self.param_frame, width=30)
self.scatter_y.insert(0, "65,59,80,81,56,55,70")
self.scatter_y.grid(row=1, column=1, pady=5)
ttk.Label(self.param_frame, text="标题:").grid(row=2, column=0, sticky=tk.W, pady=5)
self.scatter_title = ttk.Entry(self.param_frame, width=30)
self.scatter_title.insert(0, "散点图示例")
self.scatter_title.grid(row=2, column=1, pady=5)
ttk.Label(self.param_frame, text="X轴标签:").grid(row=3, column=0, sticky=tk.W, pady=5)
self.scatter_xlabel = ttk.Entry(self.param_frame, width=30)
self.scatter_xlabel.insert(0, "X轴")
self.scatter_xlabel.grid(row=3, column=1, pady=5)
ttk.Label(self.param_frame, text="Y轴标签:").grid(row=4, column=0, sticky=tk.W, pady=5)
self.scatter_ylabel = ttk.Entry(self.param_frame, width=30)
self.scatter_ylabel.insert(0, "Y轴")
self.scatter_ylabel.grid(row=4, column=1, pady=5)
ttk.Label(self.param_frame, text="点的大小:").grid(row=5, column=0, sticky=tk.W, pady=5)
self.scatter_size = ttk.Scale(self.param_frame, from_=10, to=200, orient=tk.HORIZONTAL, length=200)
self.scatter_size.set(50)
self.scatter_size.grid(row=5, column=1, pady=5)
# 生成默认图形
self.generate_graph()
def show_histogram(self):
"""显示直方图设置界面"""
self.current_graph_type = "histogram"
self.clear_param_frame()
self.root.title("图形可视化工具 - 直方图")
ttk.Label(self.param_frame, text="数据(用逗号分隔):").grid(row=0, column=0, sticky=tk.W, pady=5)
self.hist_data = ttk.Entry(self.param_frame, width=30)
# 生成一些随机数据
random_data = [random.normalvariate(50, 15) for _ in range(100)]
self.hist_data.insert(0, ",".join([str(round(x, 1)) for x in random_data]))
self.hist_data.grid(row=0, column=1, pady=5)
ttk.Label(self.param_frame, text="标题:").grid(row=1, column=0, sticky=tk.W, pady=5)
self.hist_title = ttk.Entry(self.param_frame, width=30)
self.hist_title.insert(0, "直方图示例")
self.hist_title.grid(row=1, column=1, pady=5)
ttk.Label(self.param_frame, text="X轴标签:").grid(row=2, column=0, sticky=tk.W, pady=5)
self.hist_xlabel = ttk.Entry(self.param_frame, width=30)
self.hist_xlabel.insert(0, "数值")
self.hist_xlabel.grid(row=2, column=1, pady=5)
ttk.Label(self.param_frame, text="Y轴标签:").grid(row=3, column=0, sticky=tk.W, pady=5)
self.hist_ylabel = ttk.Entry(self.param_frame, width=30)
self.hist_ylabel.insert(0, "频率")
self.hist_ylabel.grid(row=3, column=1, pady=5)
ttk.Label(self.param_frame, text="分箱数量:").grid(row=4, column=0, sticky=tk.W, pady=5)
self.hist_bins = ttk.Scale(self.param_frame, from_=5, to=50, orient=tk.HORIZONTAL, length=200)
self.hist_bins.set(10)
self.hist_bins.grid(row=4, column=1, pady=5)
# 生成默认图形
self.generate_graph()
def generate_graph(self):
"""根据当前选择的图形类型生成图形"""
self.figure.clear()
try:
if self.current_graph_type == "pie":
# 饼图
labels = self.pie_labels.get().split(',')
values = [float(x) for x in self.pie_values.get().split(',')]
title = self.pie_title.get()
show_percent = self.pie_show_percent.get()
ax = self.figure.add_subplot(111)
autopct = '%1.1f%%' if show_percent else None
ax.pie(values, labels=labels, autopct=autopct, startangle=90)
ax.axis('equal') # 使饼图为正圆形
ax.set_title(title)
elif self.current_graph_type == "bar":
# 柱状图
labels = self.bar_labels.get().split(',')
values = [float(x) for x in self.bar_values.get().split(',')]
title = self.bar_title.get()
xlabel = self.bar_xlabel.get()
ylabel = self.bar_ylabel.get()
ax = self.figure.add_subplot(111)
ax.bar(labels, values)
ax.set_xlabel(xlabel)
ax.set_ylabel(ylabel)
ax.set_title(title)
plt.xticks(rotation=45)
elif self.current_graph_type == "line":
# 折线图
x = [float(i) for i in self.line_x.get().split(',')]
y = [float(i) for i in self.line_y.get().split(',')]
title = self.line_title.get()
xlabel = self.line_xlabel.get()
ylabel = self.line_ylabel.get()
color = self.line_color.get()
ax = self.figure.add_subplot(111)
ax.plot(x, y, color=color)
ax.set_xlabel(xlabel)
ax.set_ylabel(ylabel)
ax.set_title(title)
elif self.current_graph_type == "scatter":
# 散点图
x = [float(i) for i in self.scatter_x.get().split(',')]
y = [float(i) for i in self.scatter_y.get().split(',')]
title = self.scatter_title.get()
xlabel = self.scatter_xlabel.get()
ylabel = self.scatter_ylabel.get()
size = self.scatter_size.get()
ax = self.figure.add_subplot(111)
ax.scatter(x, y, s=size)
ax.set_xlabel(xlabel)
ax.set_ylabel(ylabel)
ax.set_title(title)
elif self.current_graph_type == "histogram":
# 直方图
data = [float(i) for i in self.hist_data.get().split(',')]
title = self.hist_title.get()
xlabel = self.hist_xlabel.get()
ylabel = self.hist_ylabel.get()
bins = int(self.hist_bins.get())
ax = self.figure.add_subplot(111)
ax.hist(data, bins=bins)
ax.set_xlabel(xlabel)
ax.set_ylabel(ylabel)
ax.set_title(title)
# 调整布局并绘制图形
self.figure.tight_layout()
self.canvas.draw()
except Exception as e:
messagebox.showerror("错误", f"生成图形时出错: {str(e)}")
def reset_params(self):
"""重置当前图形的参数"""
if self.current_graph_type == "pie":
self.pie_labels.delete(0, tk.END)
self.pie_labels.insert(0, "A,B,C,D,E")
self.pie_values.delete(0, tk.END)
self.pie_values.insert(0, "15,30,45,10,20")
self.pie_title.delete(0, tk.END)
self.pie_title.insert(0, "饼图示例")
self.pie_show_percent.set(True)
elif self.current_graph_type == "bar":
self.bar_labels.delete(0, tk.END)
self.bar_labels.insert(0, "一月,二月,三月,四月,五月")
self.bar_values.delete(0, tk.END)
self.bar_values.insert(0, "65,70,80,90,85")
self.bar_title.delete(0, tk.END)
self.bar_title.insert(0, "柱状图示例")
self.bar_xlabel.delete(0, tk.END)
self.bar_xlabel.insert(0, "月份")
self.bar_ylabel.delete(0, tk.END)
self.bar_ylabel.insert(0, "数值")
elif self.current_graph_type == "line":
self.line_x.delete(0, tk.END)
self.line_x.insert(0, "1,2,3,4,5,6,7")
self.line_y.delete(0, tk.END)
self.line_y.insert(0, "65,59,80,81,56,55,70")
self.line_title.delete(0, tk.END)
self.line_title.insert(0, "折线图示例")
self.line_xlabel.delete(0, tk.END)
self.line_xlabel.insert(0, "X轴")
self.line_ylabel.delete(0, tk.END)
self.line_ylabel.insert(0, "Y轴")
self.line_color.current(0)
elif self.current_graph_type == "scatter":
self.scatter_x.delete(0, tk.END)
self.scatter_x.insert(0, "1,2,3,4,5,6,7")
self.scatter_y.delete(0, tk.END)
self.scatter_y.insert(0, "65,59,80,81,56,55,70")
self.scatter_title.delete(0, tk.END)
self.scatter_title.insert(0, "散点图示例")
self.scatter_xlabel.delete(0, tk.END)
self.scatter_xlabel.insert(0, "X轴")
self.scatter_ylabel.delete(0, tk.END)
self.scatter_ylabel.insert(0, "Y轴")
self.scatter_size.set(50)
elif self.current_graph_type == "histogram":
random_data = [random.normalvariate(50, 15) for _ in range(100)]
self.hist_data.delete(0, tk.END)
self.hist_data.insert(0, ",".join([str(round(x, 1)) for x in random_data]))
self.hist_title.delete(0, tk.END)
self.hist_title.insert(0, "直方图示例")
self.hist_xlabel.delete(0, tk.END)
self.hist_xlabel.insert(0, "数值")
self.hist_ylabel.delete(0, tk.END)
self.hist_ylabel.insert(0, "频率")
self.hist_bins.set(10)
# 重新生成图形
self.generate_graph()
def show_about(self):
"""显示关于对话框"""
messagebox.showinfo("关于", "图形可视化工具 v1.0\n\n这是一个使用Python的tkinter和matplotlib库开发的图形可视化应用程序。\n\n支持饼图、柱状图、折线图、散点图和直方图等多种图形类型。")
if __name__ == "__main__":
root = tk.Tk()
app = GraphVisualizerApp(root)
root.mainloop()
11.其他图形的效果如下




这个应用程序提供了一个直观的界面,让用户可以轻松创建和定制各种图形,无需编写代码。每个图形类型的参数设置都经过精心设计,确保用户能够灵活调整图形的外观和数据。
希望大家喜欢。有更多想要的,可以跟博主联系。
作者:搏博