千家信息网

如何自制Python函数帮助查询小工具

发表于:2025-02-01 作者:千家信息网编辑
千家信息网最后更新 2025年02月01日,今天就跟大家聊聊有关如何自制Python函数帮助查询小工具,可能很多人都不太了解,为了让大家更加了解,小编给大家总结了以下内容,希望大家根据这篇文章可以有所收获。Python的自带文档功能很不错,给与
千家信息网最后更新 2025年02月01日如何自制Python函数帮助查询小工具

今天就跟大家聊聊有关如何自制Python函数帮助查询小工具,可能很多人都不太了解,为了让大家更加了解,小编给大家总结了以下内容,希望大家根据这篇文章可以有所收获。

Python的自带文档功能很不错,给与我耳目一新的感觉。如果在CMD中进行"行式编程"编程的话,可以随时随地的查询函数的功能,非常方便。比如在学习list、tuple、dict、str、os、sys等模组的时候,利用Python的自带文档可以很快速的全面的学到那些处理的函数。所以这个自带文档功能能够给出学者带来很大的方便之处,进行简短的开发是再好不过的。

但是,当你离开CMD,要利用IDLE或者要用Komodo Edit等软件进行"段式编程"的时候,就有些捉襟见肘了。例如,wx库非常之大,帮助文件有10MB之多,如果你在CMD中打开,你可以想想你需要多少时间才能够查看到你想要的帮助信息。大规模的熟悉Python的各种API之后,你会发现,这个并不是想象的那么好用。不断的按任意键进行翻页,同时页面内能够容纳的页面也有限。所以表现出非常大的不便之处。

这里大概有两种方法解决。

使用Module Docs工具

这个工具是Python GUI IDLE自带的一个查询帮助文件的方法。在里面可以利用网页的形式,利用本机的本地功能,提供一个模拟在线的一个查询方法。它可以打开一个网页,上面可以显示出所有的函数,并带有规范的分类,比较清楚,但是使用起来还是不方便,毕竟没有搜索功能。如果将查到的网页内容保存链接,那么是不可以持续使用的。所以这个就有很大的问题,同时,其生成的网页文件巨大,内存太小是会给系统带来压力。所以这个方法并不是一个可以很方便使用的方法。

第二,自己开发工具

其实我也不愿意自己开发工具,因为这个毕竟需要时间,几天时间或者几个周的时间说少也少,说多也多,而且给自己的内心产生的压力也不小,毕竟需要分心不少来做这个事情。我在网上找了很长时间,都没有找到,对于wx,我找到一个wxPython API的英文文档,上面介绍的很不清楚,非常模糊,直接列出了函数和具体的参数,如何使用基本很少提及,而且很多控件的各种style也没有详细列举出来。所以是很不好用的,如果是名字忘掉了,那还可以查一下完整的单词和详细的参数列表。其他的功能就完全很少涉及到了。

鉴于此,我决定自己做一个小工具,花费较小的系统代价来方便的查询各种函数和模组的功能。这里只给出一个能使用的版本。开放源代码给大家,代码风格和控件设计可供初学者模仿。高手愿意来批评我,我洗耳恭听。后续版本也会发布在这里,到时候可能就先封装之后在发布,现在发布的这个是源代码文件,大家都知道,Python的源代码文件双击即可执行。

#coding=utf-8  #功能介绍:本软件最初只用于模块和函数用法的查询,进行快速的显示  #扩展功能:可以将查询成功的结果保存到本地,  #          将里面的部分函数使用汉语进行注释之后的结果保存下来  #          以保存的关键字放于右侧列表  #深度扩展:使用数据库保存结果,并提供增删查改的接口   from Tkinter import *  from StringIO import StringIO  from tkSimpleDialog import *  import sys  import Pmw  import ConfigParser  import os  import wx   class Finder(Frame):       def OnFind(self):          #执行,并获取结果          info = self.inputStr.get()          if len(info)==0:              return True         buff =StringIO()          temp = sys.stdout    #保存标准I/O流          sys.stdout = buff    #将标准I/O流重定向到buff对象          self.text.delete(1.0, END)          try:              fmt = 'help('+info+')'             result = eval(fmt)              self.text.insert(1.0, buff.getvalue())              self.savebtn.config(state=NORMAL)          except:              try:                  __import__(info)                   fmt = 'help('+self.inputStr.get()+')'                 result = eval(fmt)                  self.text.insert(1.0, buff.getvalue())              except:                  self.text.insert(1.0,"ERROR.")          sys.stdout =temp     #恢复标准I/O流buff.getvaue()          self.helpbtn.config(state=NORMAL)                def save(self):          #搜索,如果没有找到就保存,使用ini文件进行,保存数据          #保存原始          tofind = self.inputStr.get()          if len(tofind)==0:              return         filename='s_'+tofind+'.ini'         fout = open(filename,'w')          fout.write(self.text.get(1.0, END).encode('utf-8'))          fout.close()                    self.items.append(tofind)          self.items.sort()          self.config.add_section(tofind)          self.config.write(open('data.ini', 'r+'))                    nindex = self.items.index(tofind)          self.box.delete(0,END)          self.box.insert(0, *self.items)          self.box.see(nindex)          self.box.selection_set(nindex)           self.savebtn.config(state=DISABLED)       def saveas(self):          #保存修改          index = self.box.curselection()           if index<0:              return                     tofind = self.box.get(index)          if len(tofind)==0:              return         strinfo = self.text.get(1.0, END)           filename='s_'+tofind+'.ini'         fout = open(filename,'w')          fout.write(strinfo.encode("UTF-8"))          fout.close()             self.saveasbtn.config(state=DISABLED)       def __init__(self):          Frame.__init__(self)          self.option_add('*Font', 'Verdana 12 bold')          self.pack(expand=YES, fill=BOTH)          self.master.title(u'Python函数查询器')          self.master.iconname("calc1")           #左侧列表,放置已保存的条目,按照字母顺序排序          infoF = Frame(self)          infoF.pack(side=LEFT,expand=NO, fill=BOTH)           listF = Frame(infoF)          listF.pack(side=TOP,expand=YES, fill=BOTH)           #获取项目          self.config = ConfigParser.ConfigParser()          self.config.read('data.ini')          self.items = self.config.sections()          self.items.sort()          self.box = Listbox(listF,width=15,selectmode=SINGLE)          self.box.insert(0, *self.items)          self.box.bind('',self.selectionCommand)#使用鼠标释放消息          self.box.bind('',self.boxrightmenu)#使用右键菜单删除项目           self.PopupMenu=Menu(listF)          self.PopupMenu.add_command(label=u'删除',command=self.deleteitem)          self.PopupMenu.add_command(label=u'重命名',command=self.renameitem)          self.box.pack(side=LEFT,expand=YES,fill=BOTH)                    self.slbar = Scrollbar(listF, orient=VERTICAL, command=self.box.yview)          self.slbar.pack(side=RIGHT, expand=NO, fill=BOTH)          self.box.configure(yscrollcommand=self.slbar.set)                    btnf = Frame(infoF)          btnf.pack(side=BOTTOM, fill=BOTH)          self.savebtn = Button(btnf, text=u'新建保存',state=DISABLED, command=self.save)          self.savebtn.pack(side=LEFT, expand=YES, fill=BOTH)                  self.saveasbtn = Button(btnf, text=u'保存修改',state=DISABLED, command=self.saveas)          self.saveasbtn.pack(side=RIGHT, expand=YES, fill=BOTH)            #包括列表信息和显示信息          twoF = Frame(self)          twoF.pack(side=BOTTOM, expand=YES, fill=BOTH)                    #显示信息、滚动条          showF = Frame(twoF, relief=SUNKEN)          self.text = Text(showF,height=25, width =65)          self.text.insert(1.0,'information...')          self.text.pack(side=LEFT, expand=YES, fill=BOTH)             self.text.bind("", self.modify)            self.text.bind("", self.tomodify)          self.ismodified = False         showF.pack(side=TOP,expand=YES, fill=BOTH)           self.scrollbar = Scrollbar(showF, orient=VERTICAL, command=self.text.yview)          self.scrollbar.pack(side=RIGHT, expand=NO, fill=BOTH)          self.text.configure(yscrollcommand=self.scrollbar.set)           #提供输入接口,和功能如:查找          inputF = Frame(twoF)          inputF.pack(side=BOTTOM, fill=BOTH)          self.inputStr = StringVar()          self.inputStr.set('')          self.info = StringVar()          self.info.set('infomation...')          self.entry = Entry(inputF, relief=SUNKEN, textvariable=self.inputStr)          self.entry.bind("", self.inputreturn)          self.entry.pack(side=LEFT, expand=YES, fill=BOTH)                    self.findbtn = Button(inputF,text=u'查找',command=self.OnFind)          self.findbtn.pack(side=LEFT, expand=YES, fill=BOTH)          self.helpbtn = Button(inputF,text=u'帮助',command=self.OnHelp)          self.helpbtn.pack(expand=NO, fill=Y)       def OnHelp(self):          fp = open('readme.txt')          buff = fp.read()          fp.close()           self.text.delete(1.0, END)          self.text.insert(1.0, buff)             self.helpbtn.config(state=DISABLED)       def deleteitem(self):          #右键菜单, 删除功能          sels = self.box.curselection()          if len(sels) == 0:              pass #print 'no selection'          else:              sec = self.items[int(sels[0])]              self.config.remove_section(sec)              self.config.write(open('data.ini', 'w'))              self.box.delete(sels[0])       #       self.items.remove(sels[0])     #是引用效果              self.text.delete(1.0, END)              self.text.insert(1.0,'delete success.')                     def renameitem(self,event=None,en=None):          #邮件菜单, 重命名功能          retval = askstring("input",                      "input the new name:")          if len(retval)==0:              return         sels = self.box.curselection()          if len(sels) == 0:              pass #print 'no selection'          else:              #数组/表/配置文件              sec = self.items[int(sels[0])]               self.box.delete(0, END)              self.items[int(sels[0])] = retval    #数组              self.items.sort()              self.box.insert(0, *self.items)     #表                            self.config.remove_section(sec)              self.config.add_section(retval)              self.config.write(open('data.ini', 'w'))    #配置文件                            self.text.delete(1.0, END)              self.text.insert(1.0,'rename success.')                          def boxrightmenu(self,event=None,en=None):          #弹出右键菜单          self.PopupMenu.tk_popup(*self.winfo_pointerxy())            def tomodify(self,event=None,en=None):          if self.ismodified==True:              self.saveasbtn.config(state=DISABLED)              self.ismodified = False         else:              self.saveasbtn.config(state=NORMAL)              self.ismodified = True         return True           def modify(self,event=None,en=None):                      self.saveasbtn.config(state=NORMAL)          return True      def inputreturn(self,event=None,en=None):          self.OnFind()          return True               def selectionCommand(self,event=None,en=None):          # 选中列表时, 显示详细内容          sels = self.box.curselection()          if len(sels) == 0:              pass           else:              filename='s_'+self.box.get(sels[0])+'.ini'             fp = open(filename)              strinfo = fp.read()              fp.close()              self.text.delete(1.0, END)              self.text.insert(1.0,strinfo)          self.helpbtn.config(state=NORMAL)   if __name__ == '__main__':      Finder().mainloop()

注意事项,源代码文件如果想要正确执行,请自己建立一个readme.txt文件,和data.ini文件。否则将会因为这两个文件打不开而出错。为什么没有使用异常处理呢?我没有没有完善到那一步。现在这个版本已经可以使用了,所以大家不防试试看。

【注意】:打开软件后,请输入list、tuple、dict等类型进行查询,点击新建保存即可保存到列表,供下次快速打开。

有的包在源代码中没有包括,如codecs。这个时候你需要手动的将这个包添加到源文件的开头,才能够查询到,如:import codecs。

如果你修改了显示框中的文本,请及时点击保存修改进行保存,以便下次打开还可以看到你修改的效果。

本版本并不完善,而且功能有限,本身基于Python做的,所以其价值还是作为Python开发应用实例为主。

看完上述内容,你们对如何自制Python函数帮助查询小工具有进一步的了解吗?如果还想了解更多知识或者相关内容,请关注行业资讯频道,感谢大家的支持。

功能 文件 查询 函数 工具 帮助 内容 方法 源代码 信息 文档 结果 网页 菜单 开发 时候 时间 标准 版本 软件 数据库的安全要保护哪些东西 数据库安全各自的含义是什么 生产安全数据库录入 数据库的安全性及管理 数据库安全策略包含哪些 海淀数据库安全审计系统 建立农村房屋安全信息数据库 易用的数据库客户端支持安全管理 连接数据库失败ssl安全错误 数据库的锁怎样保障安全 反传销反诈骗网络安全心得 济南仁盛网络技术有限公司好吗 电商互联网科技 上海统辰网络技术有限公司 榆林ar软件开发哪家不错 服务行业的软件开发 服务器ip访问不了怎么办 小学生网络安全教育视频素材 幼儿园 网络安全 感想 北京项目软件开发靠谱吗 数据库系统开发基础 机电学校网络技术有前途吗 数据库要关闭防火墙吗 东南大学网络安全少年班 最新流行的软件开发语言 2021年军营网络安全周主题 服务器网络监控报警系统 河南科之源互联网科技有限公司 宜兴银联软件开发代理品牌 网络安全神盾级的防御体系 安卓手机软件开发需要看 警媒合作网络安全纵深 泉州网络安全学习东塔特训营 网易是使用的什么数据库 工信部网络安全方案 高级软件开发工程师济南工资水平 自动驾驶用的什么网络技术 网络安全神盾级的防御体系 有关软件开发的大专院校 代理服务器访问不安全
0