布同自制Python函数帮助查询小工具


Posted in Python onMarch 13, 2011

比如在学习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('<ButtonRelease-1>',self.selectionCommand)#使用鼠标释放消息 
self.box.bind('<ButtonRelease-3>',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("<Key>", self.modify) 
self.text.bind("<Double-Button-1>", 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("<Return>", 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开发应用实例为主。

 有修改意见请留言。
2011-03-10 12:15:05

有网友反映不能够正确执行这个源代码。我思考之后认为,跟版本应该没有关系,这些都是很基本的函数和用法。你如果不能够执行,请你尝试正确安装Pmw和wx这两个包。

1、Pmw的安装方式为:

下载:Pmw.1.3.2.tar.gz。这个东西很好找,请百度一下即可。下载之后就地解压,找到其中的“Pmw”目录,将这个目录复制到你Pyhton的安装目录下即可,不需要其他具体的目录。直接是C:\Python27\下就可以,其他的Python版本请相应的做出调整。

2、wx的安装方式为:

下载:wxPython2.8-win32-unicode-2.8.11.0-py27.exe。这个东西请百度一下,估计到wxPython的官方的英文网站下载最好,很多中文网站也提供了下载,所以找到不是难事。双击进行默认方式的安装即可,你不用改变目录或者其他。它会自动的安装到你的安装目录下,我的目录是:C:\Python27\Lib\site-packages\wx-2.8-msw-unicode。

3、Tkinter库已经系统集成,不需要安装。主要是上面两个库即可。

4、如何检验是否安装正确?

安装之后,请到Python的COMMAND LINE中输入:import wx或者import Pmw尝试是否输入正确。没有提示信息就是正确的。你还可以进一步看看包中的信息,输入如:dir(wx)或者dir(Pmw)。不推荐使用help()函数,正如我上面所说,wx的信息多达10MB之多,你是显示不完的,不断刷屏的效果估计你不会喜欢。

Python 相关文章推荐
决策树的python实现方法
Nov 18 Python
Python re模块介绍
Nov 30 Python
Python中的super用法详解
May 28 Python
ubuntu环境下python虚拟环境的安装过程
Jan 07 Python
深入浅析python 中的匿名函数
May 21 Python
解决python3中cv2读取中文路径的问题
Dec 05 Python
python使用BeautifulSoup与正则表达式爬取时光网不同地区top100电影并对比
Apr 15 Python
python机器人运动范围问题的解答
Apr 29 Python
Django之PopUp的具体实现方法
Aug 31 Python
python如何基于redis实现ip代理池
Jan 17 Python
细数nn.BCELoss与nn.CrossEntropyLoss的区别
Feb 29 Python
Django利用elasticsearch(搜索引擎)实现搜索功能
Nov 26 Python
Python中的文件和目录操作实现代码
Mar 13 #Python
python 中的列表解析和生成表达式
Mar 10 #Python
Python中使用中文的方法
Feb 19 #Python
python实现的防DDoS脚本
Feb 08 #Python
Python牛刀小试密码爆破
Feb 03 #Python
初学python数组的处理代码
Jan 04 #Python
让python json encode datetime类型
Dec 28 #Python
You might like
从零开始学YII2框架(六)高级应用程序模板
2014/08/20 PHP
php数据访问之增删改查操作
2016/05/09 PHP
Laravel+jQuery实现AJAX分页效果
2016/09/14 PHP
laravel与thinkphp之间的区别与优缺点
2021/03/02 PHP
javascript对数组的常用操作代码 数组方法总汇
2011/01/27 Javascript
jQuery调用WebService的实现代码
2011/06/19 Javascript
Jquery对select的增、删、改、查操作
2015/02/06 Javascript
angularjs 表单密码验证自定义指令实现代码
2016/10/27 Javascript
jQuery实现圣诞节礼物动画案例解析
2016/12/25 Javascript
详解Vue自定义过滤器的实现
2017/01/10 Javascript
利用JS实现简单的日期选择插件
2017/01/23 Javascript
nodejs个人博客开发第二步 入口文件
2017/04/12 NodeJs
jQuery滑动到底部加载下一页数据的实例代码
2017/05/22 jQuery
JS+HTML5 FileReader实现文件上传前本地预览功能
2020/03/27 Javascript
基于JavaScript实现选项卡效果
2017/07/21 Javascript
JavaScript Math对象和调试程序的方法分析
2019/05/13 Javascript
VUE脚手架具体使用方法
2019/05/20 Javascript
NProgress显示顶部进度条效果及使用详解
2019/09/21 Javascript
[02:08]DOTA2英雄基础教程 马格纳斯
2014/01/17 DOTA
python使用pyhook监控键盘并实现切换歌曲的功能
2014/07/18 Python
Python中的闭包实例详解
2014/08/29 Python
python的Template使用指南
2014/09/11 Python
实例讲解python中的序列化知识点
2018/10/08 Python
python+opencv实现阈值分割
2018/12/26 Python
python文件和文件夹复制函数
2020/02/07 Python
解决Opencv+Python cv2.imshow闪退问题
2020/04/24 Python
python图片合成的示例
2020/11/09 Python
YOINS官网:时尚女装网上购物
2017/03/17 全球购物
Nike香港官网:Nike HK
2019/03/23 全球购物
物理力学求职信
2014/02/18 职场文书
分家协议书
2014/04/21 职场文书
道德之星事迹材料
2014/05/03 职场文书
学雷锋志愿者活动总结
2014/06/27 职场文书
关于有小孩的离婚协议书
2014/10/26 职场文书
大学毕业论文致谢词
2015/05/14 职场文书
元素水平垂直居中的方式
2021/03/31 HTML / CSS