布同自制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 BeautifulSoup使用方法详解
Nov 21 Python
python实现斐波那契数列的方法示例
Jan 12 Python
Python SQLite3数据库日期与时间常见函数用法分析
Aug 14 Python
TensorFlow 实战之实现卷积神经网络的实例讲解
Feb 26 Python
Python 装饰器实现DRY(不重复代码)原则
Mar 05 Python
python 判断网络连通的实现方法
Apr 22 Python
详解django.contirb.auth-认证
Jul 16 Python
Python正则表达式指南 推荐
Oct 09 Python
Python拼接字符串的7种方法总结
Nov 01 Python
用python实现刷点击率的示例代码
Feb 21 Python
在python image 中安装中文字体的实现方法
Aug 22 Python
matplotlib设置颜色、标记、线条,让你的图像更加丰富(推荐)
Sep 25 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
PHP 批量删除数据的方法分析
2009/10/30 PHP
提高define性能的php扩展hidef的安装和使用
2011/06/14 PHP
使用PHP实现密保卡功能实现代码&amp;lt;打包下载直接运行&amp;gt;
2011/10/09 PHP
golang 调用 php7详解及实例
2017/01/04 PHP
jquery下json数组的操作实现代码
2010/08/09 Javascript
常用jQuery选择器总结
2014/07/11 Javascript
详解js中构造流程图的核心技术JsPlumb
2015/12/08 Javascript
javascript性能优化之事件委托实例详解
2015/12/12 Javascript
vuejs动态组件给子组件传递数据的方法详解
2016/09/09 Javascript
微信小程序 首页制作简单实例
2017/04/07 Javascript
详解在AngularJS的controller外部直接获取$scope
2017/06/02 Javascript
js学习心得_一个简单的动画库封装tween.js
2017/07/14 Javascript
JavaScript实现跟随滚动缓冲运动广告框
2017/07/15 Javascript
利用javascript如何随机生成一定位数的密码
2017/09/22 Javascript
详解VueJS应用中管理用户权限
2018/02/02 Javascript
详解vue中axios的封装
2018/07/18 Javascript
vue的keep-alive中使用EventBus的方法
2019/04/23 Javascript
fastadmin中调用js的方法
2019/05/14 Javascript
jquery实现二级导航下拉菜单效果实例
2019/05/14 jQuery
小程序如何支持使用 async/await详解
2019/09/12 Javascript
python网络编程实例简析
2014/09/26 Python
Python使用scrapy采集数据过程中放回下载过大页面的方法
2015/04/08 Python
python自动截取需要区域,进行图像识别的方法
2018/05/17 Python
python开启debug模式的方法
2019/06/27 Python
python3用PIL把图片转换为RGB图片的实例
2019/07/04 Python
基于TensorBoard中graph模块图结构分析
2020/02/15 Python
美国Jeep配件购物网站:Morris 4×4 Center
2019/05/01 全球购物
高三自我鉴定怎么写
2013/10/19 职场文书
材料员岗位职责
2014/03/13 职场文书
运动会开幕式主持词
2014/03/28 职场文书
创建学习型党组织实施方案
2014/03/29 职场文书
三字经教学反思
2014/04/26 职场文书
讲文明知礼仪演讲稿
2014/09/13 职场文书
北京故宫导游词
2015/01/31 职场文书
idea搭建可运行Servlet的Web项目
2021/06/26 Java/Android
MySQL 聚合函数排序
2021/07/16 MySQL