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

品牌学习网站方寸网站建设

品牌学习网站,方寸网站建设,工程与建设期刊,网站制作多少文章目录 辅助坐标增减坐标轴时间轴**代码优化源代码 Python绘图系统#xff1a; 前置源码#xff1a; Python打造动态绘图系统#x1f4c8;一 三维绘图系统 #x1f4c8;二 多图绘制系统#x1f4c8;三 坐 标 轴 定 制#x1f4c8;四 定制绘图风格 #x1f4c8;五 数据… 文章目录 辅助坐标增减坐标轴时间轴**代码优化源代码 Python绘图系统 前置源码 Python打造动态绘图系统一 三维绘图系统 二 多图绘制系统三 坐 标 轴 定 制四 定制绘图风格 五 数据生成导入六 三维动态演示坐标列表进阶导出数据系统菜单批量文件导入辅助坐标轴 辅助坐标 通过eval实现的源码阅读功能具有非常强大的定制功能但落实到具体使用上坐标输入框中的代码总不能太长。如果想对数据进行复杂的处理那么就相当于提出了一个新的需求能否给出一些辅助坐标系用于数据处理。 这个功能并不复杂而且代码敲到现在应该可以说是很有经验了首先在工具栏末尾填上加减号按钮用于添加删除辅助坐标。 在initFeature结尾加上 btn ttk.Button(frm, text, width3) btn.pack(sidetk.LEFT) btn.bind(Button-1, self.addLast)btn ttk.Button(frm, text-, width3) btn.pack(sidetk.LEFT) btn.bind(Button-1, self.rmLast)界面变为 增减坐标轴 若想添加辅助坐标轴那么首先要给坐标轴取一个名字由于具体计算时都在函数中局部地进行故而可以用abcdefg这样一直下去一般不会出太大的问题。另一方面创建AxisFrame需要空间宽度和控件模式这两个参数而这个参数是从初始化时由外部传入的所以在初始化代码中添加两个全局变量 self.afWidth widths self.afMode mode而addLast代码如下 def addLast(self, evt):ABC abcdefghijklmnopqrsfor a in ABC:if a in self.afs:continueself.afs[a] AxisFrame(self._a, a, self.afMode, self.afWidth)breakself.updateVisible()这段代码相当于预设了最多20个辅助坐标大部分情况下应该是够用了。 减少坐标轴的逻辑和添加坐标轴相反但在pack_forget之后不要忘了把这个对象删掉。 def rmLast(self, evt):CBA abcdefghijklmnopqrs[::-1]for a in CBA:if a not in self.afs:continueself.afs[a].pack_forget()del self.afs[a]breakself.updateVisible()效果如下 时间轴** 在具体绘图时时间轴和其他坐标轴有着完全不同的操作这种不同也应该体现在AxisList的布局上。所以下面要为事件轴专门做一个开关就像最开始的txyz的独立开关按钮一样。 同时考虑到作图需求即有些图像不是三个轴能够完全搞定的比如箭头向量图。所以需要新增几个坐标轴。 self.vis {L : True for L in txyzuvw} for u in uvw: self.vis[u] False 这里需要改动的地方很多很零碎最重要的地方是dimChanged函数要把txyz编程’xyzuvw’ def dimChanged(self, evt):txyz self.getDim()for flag in xyzuvw:self.vis[flag] flag in txyzself.updateVisible()代码优化 至此AxisList就已经有了相对完备的功能但新增功能之后还需要做的就是代码的优化从可读性、复用率的角度对代码进行整理。 首先是文件格式常量以及字母表可先将其设为全局变量。 然后当对话框返回值为空时需要跳出函数。 另外控件显示和隐藏功能其实是可以和坐标轴的显隐功能合在一起的这也可以解决之前一直存在的一个bug。 源代码 最后附上源代码。关于AxisList的修改暂时可以告一段落了接下来将要做的是修改DrawStyle和DrawType这两个class。 import tkinter as tk import tkinter.ttk as ttk from tkinter.filedialog import * from tkinter.simpledialog import * from tkinter.messagebox import showwarning import numpy as npfrom aframe import AxisFrame, AskDct from base import DrawType, DrawStyleclass AxisList(ttk.Frame):def __init__(self, master, title, mode, widths, types, typeDct, # 绘图类型Combobox的参数**options):super().__init__(master, **options)self.pack()self.initConst()self.afs {}self.data {}self.afWidth widthsself.afMode modeself.initWidgets(title, widths)self.initFeature(types, typeDct)self.initAxis(mode, widths)self.initStyleFrame()def initConst(self):self.ABC abcdefghijklmnopqrsself.FILE_MERGE [(numpy数组, npy), (文本文件, csv)]self.FILE_ALL [(文本文件, txt), (文本文件, csv), (二进制文件, bin)]def initWidgets(self, title, widths):self.btn ttk.Button(self, texttitle, widthsum(widths)5,commandself.Click)self.btn.pack(sidetk.TOP, filltk.X, expandtk.YES)self._c ttk.Frame(self) # 此为主控件self._b ttk.Frame(self._c) # 工具栏控件self._a ttk.Frame(self._c) # 此为坐标轴self._s ttk.LabelFrame(self._c, text 绘图风格)self._b.pack(sidetk.TOP)self._a.pack(sidetk.TOP)self._s.pack(sidetk.TOP)self.collapsed Trueself.Click()# 初始化工具栏def initFeature(self, types, typeDct):frm self._bfrm.pack(pady2, sidetk.TOP, filltk.X)btn ttk.Menubutton(frm, text功能,width4)btn.pack(sidetk.LEFT)m self.initFileMenu(btn)btn.config(menum)self.drawType DrawType(frm, typeDct, funcself.dimChanged)self.drawType.pack(sidetk.LEFT, padx2)self.vis {L : True for L in txyzuvw}ttk.Button(frm, textt, width3, commandself.showTimeAxis).pack(sidetk.LEFT)btn ttk.Button(frm, text, width3)btn.pack(sidetk.LEFT)btn.bind(Button-1, self.addLast)btn ttk.Button(frm, text-, width3)btn.pack(sidetk.LEFT)btn.bind(Button-1, self.rmLast)def addLast(self, evt):for a in self.ABC:if a in self.afs:continueself.afs[a] AxisFrame(self._a, a, self.afMode, self.afWidth)breakself.updateVisible()def rmLast(self, evt):for a in self.ABC[::-1]:if a not in self.afs:continueself.afs[a].pack_forget()del self.afs[a]breakself.updateVisible()def showTimeAxis(self):self.vis[t] not self.vis[t]self.updateVisible()# 设置菜单def initFileMenu(self, btn):top tk.Menu(btn, tearoffFalse)menuDct {导入 : {按坐标轴 : self.mImportOne, 合并导入 : self.mImportMerge, 多文件导入: self.mImportAll},导出 : {合并导出 : self.mExportMerge,全部导出 : self.mExportAll,单轴导出 : self.mExportOne},窗口 : { 风格 : self.btnShowStyle}}for key in menuDct:m tk.Menu(top, tearoffFalse)for L,C in menuDct[key].items():m.add_command(labelL, command C)top.add_cascade(labelkey, menum)self.showStyle Falsereturn top# 加载数据def btnLoadData(self):name askopenfilename()data np.genfromtxt(name)for i, flag in enumerate(xyzuvw):if i data.shape[1]:returnself.setOneMode(flag, 外部导入)self.data[flag] self.setData(flag, data[:,i])def mImportOne(self):fs askstring(设置参数, 坐标轴间按照逗号分开)fs fs.replace(, ,).split(,)for f in fs:if f not in self.getDim():showwarning(您输入的坐标轴并不存在)continueself.afs[f].setMode(外部导入)self.afs[f].slctChanged(None)self.afs[f].btnImportComplex(None) def mImportAll(self):fs askopenfilenames(filetypesself.FILE_ALL)for i,f in enumerate(self.getDim()):if i len(fs) : returnself.afs[f].setMode(外部导入)self.afs[f].slctChanged(None)self.afs[f].btnImportSimple(None)def mImportMerge(self):path askopenfilename(filetypesself.FILE_MERGE)if path : returnif path.endswith(.npy):data np.load(path)else:data np.loadtxt(path)for i,f in enumerate(self.getDim()):if i len(data): continueself.afs[f].setMode(外部导入)self.afs[f].slctChanged(None)self.afs[f].data data[i]def mExportMerge(self):path asksaveasfilename(filetypesself.FILE_MERGE, initialfileTrue)if path : returnarr np.array([self.afs[flag].data for flag in self.getDim()])if path.endswith(.npy):arr.tofile(path)else:np.savetxt(path, arr, delimiter, )def mExportAll(self):path askdirectory()if path : returnfor flag in self.getDim():#self.afs[flag].save(path)passdef mExportOne(self):flag askstring(请选择输出的轴)if flag not in self.getDim():showwarning(您输入的坐标轴并不存在)#self.afs[flag].save()# 初始化坐标轴def initAxis(self, mode, widths):for flag in txyzuvw:self.afs[flag] AxisFrame(self._a, flag, mode, widths)self.afs[flag].pack(sidetk.TOP, filltk.X)self.vis {L : L in self.getDim() for L in txyzuvw}self.updateVisible()# 初始化风格控件def initStyleFrame(self):self.drawStyle DrawStyle(self._s)self.drawStyle.pack(sidetk.TOP, filltk.X)# 维度改变时的回调函数def dimChanged(self, evt):txyz self.getDim()for flag in xyzuvw:self.vis[flag] flag in txyzself.updateVisible()# 更新隐藏和显示def updateVisible(self):for key in self.afs:self.afs[key].pack_forget()for key in self.ABC:if key in self.afs:self.afs[key].pack(sidetk.TOP, filltk.X)for flag in txyzuvw:if self.vis[flag]:self.afs[flag].pack(sidetk.TOP, filltk.X)if self.showStyle:self._s.pack(sidetk.TOP, filltk.X)else:self._s.pack_forget()def btnShowStyle(self):self.showStyle not self.showStyleself.updateVisible()def getSub(self):return self.drawType.getSub()def getProj(self):return self.drawType.getProj()def getType(self):return self.drawType.getType()def getDim(self):xyz self.getXYZ()if self.vis[t]:xyz t xyzreturn xyzdef getXYZ(self):return self.drawType.getDim()def hasTimeAxis(self):return self.vis[t]def getStyle(self):return self.drawStyle.getVarDct()def Click(self):if self.collapsed:self._c.pack(sidetk.TOP, filltk.BOTH, expandtk.YES) else:self._c.pack_forget()self.collapsed not self.collapsed# 设置数据def setData(self, flag, dataNone, **options):return self.afs[flag].setData(data, **options)# 设置模式def setOneMode(self, flag, mode):self.afs[flag].setMode(mode)
http://www.w-s-a.com/news/672021/

相关文章:

  • 龙华做网站yihe kj安徽六安彩礼一般给多少
  • flash网站建设公司我的小程序在哪里找
  • 建网站需要数据库吗如何制作简单的网页链接
  • 杭州设计企业网站高端公司上虞做网站公司
  • 做网站能赚钱么用wordpress搭建知名网站
  • 阿里云服务器网站开发青岛做网站找哪家
  • 凡科做的网站为什么打不开织梦cms仿某作文网站整站源码(带采集)安装数据库
  • 免费h5模板网站模板汽车报价网址
  • 蔡甸网站建设烟台网站建设yt
  • 最流行的网站开发新开的网页游戏平台
  • 暴富建站wordpress 标签分类
  • 搞笑网站源码百度快照替代
  • 重庆网站建设哪家公司哪家好关键词是怎么排名的
  • 青县网站建设今天国际大事新闻
  • 深圳正规网站制作哪里好怎样优化网络
  • 米拓网站建设教程dw成品网站成品视频教学
  • 用jsp做的网站源代码天门网站网站建设
  • 百度如何把网站做链接地址有没有资源可以在线观看
  • 淮安做网站找哪家好电子商务网站建设规划书的内容
  • 开发网站建设用什么框架php黄页系统
  • 聊城制作网站全球十大电商平台排名
  • 用什么来网站开发好mega menu wordpress
  • 深圳制作网站有用吗wordpress的主题
  • 网站的规划与创建天津市南开区网站开发有限公司
  • 免备案网站主机建站哪个平台好
  • python做网站 不适合单页营销分享网站
  • 珠海市研发网站建设建设网站挣钱
  • 阿里巴巴国际站特点做wps的网站赚钱
  • wordpress更换域名后网站打不开宜昌建设银行网站
  • 写出网站开发的基本流程百度网页电脑版入口