如何用Python设计的界面生成简单的图表

B站影视 港台电影 2025-03-19 16:01 1

摘要:我打算设计一个界面,可以直接生成一个简单的图表,不需要输入数据,点击直接生成,每次点击都发生变化,当你找到需要的图标样式,可以点击保存,还设置一个清除图表的功能,比如折线图、柱状图等。

我打算设计一个界面,可以直接生成一个简单的图表,不需要输入数据,点击直接生成,每次点击都发生变化,当你找到需要的图标样式,可以点击保存,还设置一个清除图表的功能,比如折线图、柱状图等。

预想设计效果

用自带tkinter建立窗口,图表就matplotlib绘图库,没有的就要去P下,我的之前安装过了就不pip,已经安装了就不会安装,有必要可以更新

已经安装

我们可以先把要用到的都搞进来

import tkinter as tk#还是用自带的

from tkinter import ttk, filedialog

import matplotlib.pyplot as plt #没有就需要安装

from matplotlib.figure import Figure

from matplotlib.backends.backend_tkagg import FigureCanvasTkAgg

import numpy as np

然后初始化点,

class PlotApp:

def __init__(self, root):

self.root = root

self.root.title("设计一个简单随机生成图界面 v0.1")

self.setup_ui

self.current_figure = None

def setup_ui(self):

"""初始化界面组件"""

# 主框架布局

main_frame = ttk.Frame(self.root)

main_frame.pack(fill=tk.BOTH, expand=True)

# 左侧控制面板,控制主要操作

control_panel = ttk.Frame(main_frame, width=150)

control_panel.pack(side=tk.LEFT, fill=tk.Y)

# 右侧生成图标区域

plot_frame = ttk.Frame(main_frame)

plot_frame.pack(side=tk.RIGHT, fill=tk.BOTH, expand=True)

搞几个按钮吧

# 根据你的思路添加按钮

ttk.Button(control_panel, text="点我生成折线图", command=self.plot_line).pack(pady=5, fill=tk.X)

ttk.Button(control_panel, text="点我生成柱状图", command=self.plot_bar).pack(pady=5, fill=tk.X)

ttk.Button(control_panel, text="点我生成散点图", command=self.plot_scatter).pack(pady=5, fill=tk.X)

ttk.Button(control_panel, text="点我清除生成的图表", command=self.clear_plot).pack(pady=5, fill=tk.X)

ttk.Button(control_panel, text="点我保存图表", command=self.save_plot).pack(pady=5, fill=tk.X)

生成的图标,初始化下,下笔从哪开始总要告诉它

# 初始化绘图区域

self.figure = Figure(figsize=(6, 4), dpi=100)

self.canvas = FigureCanvasTkAgg(self.figure, master=plot_frame)

self.canvas.get_tk_widget.pack(fill=tk.BOTH, expand=True)

自动生成的,搞点数据来,你也可以通过输入数据,还是先搞点简单的。

def generate_sample_data(self):

"""自动的么,就搞点数据生成,不能就要设置一些输入框输入数据生成"""

x = np.linspace(0, 10, 50)

y = np.sin(x) + np.random.normal(0, 0.2, 50)

return x, y

现在我们通过上面的数据,开始生成

def plot_line(self):

"""通过生成的数据,绘制折线图"""

self._prepare_plot

ax = self.figure.add_subplot(111)

x, y = self.generate_sample_data

ax.plot(x, y, color='blue', marker='o', linestyle='--')

ax.set_title("折线图示例")

self.canvas.draw

def plot_bar(self):

"""通过生成的数据,绘制柱状图"""

self._prepare_plot

x = ['1', '2', '3', '4', '5']

y = np.random.randint(10, 50, 5)

ax.bar(x, y, color='green', alpha=0.7)

ax.set_title("柱状图示例")

self.canvas.draw

def plot_scatter(self):

"""通过生成的数据,绘制散点图"""

self._prepare_plot

ax.scatter(x, y, color='red', s=50, alpha=0.6)

ax.set_title("散点图示例")

self.canvas.draw

def _prepare_plot(self):

"""通过生成的数据,准备绘图区域"""

self.figure.clear

self.figure.subplots_adjust(left=0.1, right=0.9, top=0.9, bottom=0.1)

生成图片

还有清除、保存功能,不要忘记了

"""清除图表"""

def clear_plot(self):

self.figure.clear

self.canvas.draw

def save_plot(self):

"""保存图表"""

if not self.figure.axes:

tk.messagebox.showwarning("警告", "请先生成图表!")

return

file_path = filedialog.asksaveasfilename(

defaultextension=".png",

filetypes=[("PNG文件", "*.png"), ("PDF文件", "*.pdf"), ("所有文件", "*.*")]

if file_path:

self.figure.savefig(file_path)

tk.messagebox.showinfo("保存成功", f"图表已保存至:\n{file_path}")

保存PNG

if __name__ == "__main__":

root = tk.Tk

root.geometry("800x600")

app = PlotApp(root)

root.mainloop

附上代码截图

代码截图1

代码截图2

代码截图3

代码截图4

来源:Sug科技聚焦

相关推荐