当前位置: 首页 > news >正文

东莞 网站建设企业深圳航空有限公司官网

东莞 网站建设企业,深圳航空有限公司官网,能添加网站的导航,网页设计与制作实用教程电子资源文章目录 导入数据文件对话框修改绘图逻辑源代码 Python绘图系统系列:将matplotlib嵌入到tkinter 简单的绘图系统 导入数据 单纯从作图的角度来说,更多情况是已经有了一组数据,然后需要将其绘制。这组数据可能是txt格式的,也可能…

文章目录

    • 导入数据
    • 文件对话框
    • 修改绘图逻辑
    • 源代码

Python绘图系统系列:将matplotlib嵌入到tkinter 简单的绘图系统

导入数据

单纯从作图的角度来说,更多情况是已经有了一组数据,然后需要将其绘制。这组数据可能是txt格式的,也可能是csv格式的,还可能是二进制数据。当然,这些一会儿在想,首先就是要添加一个按钮,将setCtrlButtons函数添加一行:

def setCtrlButtons(self, frm):ttk.Button(frm, text="绘图",width=5,command=self.btnDrawImg).pack(side=tk.LEFT)ttk.Button(frm, text="加载",width=5,command=self.btnLoadData).pack(side=tk.LEFT)

然后就可以考虑self.btnLoadData函数了。

简洁起见,以后将不再具体展示setCtrlButtons的具体代码,而只是写出新增的代码。

文件对话框

加载数据,其实就是加载文件,那么文件对话框就很重要。

tkinter.filedialog中的askopenfilename就是文件对话框,预感这个函数可能不止一处出现,故而导入一下,以方便调用

from tkinter.filedialog import askopenfilename

这个函数的好处是,只返回读取到的文件名,而不像askopenfile一样返回一个文件对象。

self.btnLoadData函数,如果只是想实现一个最简单的功能,那么
可以写为

def btnLoadData(self):name = askopenfilename()data = np.genfromtxt(name)if data.shape[1] < 2:returnself.xs = data[:,0]self.ys = data[:,1]self.drawPlot()

效果如下

在这里插入图片描述

修改绘图逻辑

现在,我们有了两种数据生成模式,一是用语法生成,二是通过加载得到。但目前来说这两种生成方式并不兼容。为了解决这个问题,可以为x和y的输入框添加一个标识,比如当x或者y的输入框中是data的时候,再点击绘图,就可以选中加载后的数据。

由于tkinter中输入Entry内容比较繁琐,所以封装一个全局的函数专门用于更改Entry内容

def setEntry(e, text):e.delete(0, "end")e.insert(0, text)

接下来,将加载数据函数和绘图函数分别改写为

def btnLoadData(self):name = askopenfilename()data = np.genfromtxt(name)if data.shape[1] < 2:returnself.xs = data[:,0]setEntry(self.xEntry, "data")self.ys = data[:,1]setEntry(self.yEntry, "data")def btnDrawImg(self):xLab = self.xEntry.get()if xLab != "data":x = eval(f"np.linspace({xLab})")self.xs = xelse:x = self.xsyLab = self.yEntry.get()if yLab != "data":self.ys = eval(yLab)self.drawPlot()

在btnLoadData函数中,取消了绘图功能,而是在导入数据后,将xEntry和yEntry的内容设置为"data"。

而绘图函数中,检测xEntry和yEntry的内容,如果是data,那么说明已经读取到了相关数据,就直接调用,而非重新生成。

在这里插入图片描述

源代码

最后,把源代码附在下面

import tkinter as tk
import tkinter.ttk as ttk
from tkinter.filedialog import askopenfilenameimport matplotlib as mpl
mpl.use('TkAgg')
import matplotlib.pyplot as plt
from matplotlib.backends.backend_tkagg import (FigureCanvasTkAgg, NavigationToolbar2Tk)
from matplotlib.figure import Figureimport numpy as npdef setEntry(e, text):e.delete(0, "end")e.insert(0, text)class DarwSystem():def __init__(self):self.root = tk.Tk()self.root.title("数据展示工具")frmCtrl = ttk.Frame(self.root,width=320)frmCtrl.pack(side=tk.RIGHT, fill=tk.Y)self.setFrmCtrl(frmCtrl)frmFig = ttk.Frame(self.root)frmFig.pack(side=tk.LEFT,fill=tk.BOTH,expand=tk.YES)self.setFrmFig(frmFig)self.root.mainloop()def setFrmCtrl(self, frmCtrl):frm = ttk.Frame(frmCtrl, width=320)frm.pack(side=tk.TOP, fill=tk.X)self.setCtrlButtons(frm)frm = ttk.Frame(frmCtrl)frm.pack(side=tk.TOP, fill=tk.X)self.setFrmX(frm)frm = ttk.Frame(frmCtrl)frm.pack(side=tk.TOP, fill=tk.X)self.setFrmY(frm)def setFrmX(self, frm):tk.Label(frm, text="x").pack(side=tk.LEFT)self.xEntry = tk.Entry(frm)self.xEntry.pack(side=tk.LEFT, fill=tk.X)def setFrmY(self, frm):tk.Label(frm, text="y").pack(side=tk.LEFT)self.yEntry = tk.Entry(frm)self.yEntry.pack(side=tk.LEFT, fill=tk.X)def setCtrlButtons(self, frm):ttk.Button(frm, text="绘图",width=5,command=self.btnDrawImg).pack(side=tk.LEFT)ttk.Button(frm, text="加载",width=5,command=self.btnLoadData).pack(side=tk.LEFT)def btnLoadData(self):name = askopenfilename()data = np.genfromtxt(name)if data.shape[1] < 2:returnself.xs = data[:,0]setEntry(self.xEntry, "data")self.ys = data[:,1]setEntry(self.yEntry, "data")def btnDrawImg(self):xLab = self.xEntry.get()if xLab != "data":x = eval(f"np.linspace({xLab})")self.xs = xelse:x = self.xsyLab = self.yEntry.get()if yLab != "data":self.ys = eval(yLab)self.drawPlot()def drawPlot(self):self.fig.clf()ax = self.fig.add_subplot()ax.plot(self.xs, self.ys)self.fig.subplots_adjust(left=0.1, right=0.95, top=0.95, bottom=0.08)self.canvas.draw()passdef setFrmFig(self, frmFig):self.fig = Figure()self.canvas = FigureCanvasTkAgg(self.fig,frmFig)self.canvas.get_tk_widget().pack(side=tk.TOP,fill=tk.BOTH,expand=tk.YES)self.toolbar = NavigationToolbar2Tk(self.canvas,frmFig,pack_toolbar=False)self.toolbar.update()self.toolbar.pack(side=tk.RIGHT)if __name__ == "__main__":test = DarwSystem()
http://www.yayakq.cn/news/719018/

相关文章:

  • ssh网站开发大型h5手游平台
  • 做ps的素材哪个网站百度竞价排名正确解释
  • ui网站界面设计模板网站换关键词
  • 发布网站建设信息自己做的网站可以百度推广吗
  • 天津 网站设计公司wordpress也没修改
  • 贵州省建设厅考试网站东庄水利建设公司网站
  • 颜色搭配对网站重要性如何选网站空间
  • 3合1网站建设白城百度网站建设
  • 建设网站需要什么条件做网站应该会什么问题
  • 中国免费网站服务器主机域名信用信息查询公示系统
  • 网站建设公司生存百度首页关键词优化
  • 网站排名优化快速黄岐建网站
  • 站酷的网址站长统计幸福宝网站统计
  • 徐州自助建站系统个人网页制作成品免费开源代码
  • 网站备案的幕布尺寸wordpress 4.5下载
  • 企业手机网站建设机构网站建设皖icp
  • 哪个网站做的简历最好公司做的网站版权归谁所有
  • 植物网站设计方案网址大全在线免费观看
  • 代码优化网站排名wordpress 多备份
  • 佛山专业网站建设报价广西南宁市有哪些网络公司
  • 做企业网站电话销售话术巴中网站开发
  • 门户网站建设思维导图收钱码合并的网站怎么做
  • 陕西西安建设厅官方网站c语言除了做网站还能干什么
  • 专业企业网站制作南京网站设计公司哪儿济南兴田德润怎么联系
  • 旅游搜索网站开发做网站是自己公司做好还是外包好
  • 淘宝网站做淘宝客学校网站管理系统免费版
  • 网络营销期末考试试题及答案沈阳百度首页优化
  • 辽宁注册公司网站实现网站开发
  • 呼和浩特市网站建设公司如何登录微信开发者平台
  • 网站开发和浏览器兼容问题东莞网站建设公司网站建设