布同自制Python函數(shù)幫助查詢小工具
更新時(shí)間:2011年03月13日 13:12:18 作者:
Python的自帶文檔功能很不錯(cuò),給與我耳目一新的感覺(jué)。如果在CMD中進(jìn)行“行式編程”編程的話,可以隨時(shí)隨地的查詢函數(shù)的功能,非常方便。
比如在學(xué)習(xí)list、tuple、dict、str、os、sys等模組的時(shí)候,利用Python的自帶文檔可以很快速的全面的學(xué)到那些處理的函數(shù)。所以這個(gè)自帶文檔功能能夠給出學(xué)者帶來(lái)很大的方便之處,進(jìn)行簡(jiǎn)短的開(kāi)發(fā)是再好不過(guò)的。
但是,當(dāng)你離開(kāi)CMD,要利用IDLE或者要用Komodo Edit等軟件進(jìn)行“段式編程”的時(shí)候,就有些捉襟見(jiàn)肘了。例如,wx庫(kù)非常之大,幫助文件有10MB之多,如果你在CMD中打開(kāi),你可以想想你需要多少時(shí)間才能夠查看到你想要的幫助信息。大規(guī)模的熟悉Python的各種API之后,你會(huì)發(fā)現(xiàn),這個(gè)并不是想象的那么好用。不斷的按任意鍵進(jìn)行翻頁(yè),同時(shí)頁(yè)面內(nèi)能夠容納的頁(yè)面也有限。所以表現(xiàn)出非常大的不便之處。
這里大概有兩種方法解決。
第一,使用Module Docs工具
這個(gè)工具是Python GUI IDLE自帶的一個(gè)查詢幫助文件的方法。在里面可以利用網(wǎng)頁(yè)的形式,利用本機(jī)的本地功能,提供一個(gè)模擬在線的一個(gè)查詢方法。它可以打開(kāi)一個(gè)網(wǎng)頁(yè),上面可以顯示出所有的函數(shù),并帶有規(guī)范的分類,比較清楚,但是使用起來(lái)還是不方便,畢竟沒(méi)有搜索功能。如果將查到的網(wǎng)頁(yè)內(nèi)容保存鏈接,那么是不可以持續(xù)使用的。所以這個(gè)就有很大的問(wèn)題,同時(shí),其生成的網(wǎng)頁(yè)文件巨大,內(nèi)存太小是會(huì)給系統(tǒng)帶來(lái)壓力。所以這個(gè)方法并不是一個(gè)可以很方便使用的方法。
第二,自己開(kāi)發(fā)工具
其實(shí)我也不愿意自己開(kāi)發(fā)工具,因?yàn)檫@個(gè)畢竟需要時(shí)間,幾天時(shí)間或者幾個(gè)周的時(shí)間說(shuō)少也少,說(shuō)多也多,而且給自己的內(nèi)心產(chǎn)生的壓力也不小,畢竟需要分心不少來(lái)做這個(gè)事情。我在網(wǎng)上找了很長(zhǎng)時(shí)間,都沒(méi)有找到,對(duì)于wx,我找到一個(gè)wxPython API的英文文檔,上面介紹的很不清楚,非常模糊,直接列出了函數(shù)和具體的參數(shù),如何使用基本很少提及,而且很多控件的各種style也沒(méi)有詳細(xì)列舉出來(lái)。所以是很不好用的,如果是名字忘掉了,那還可以查一下完整的單詞和詳細(xì)的參數(shù)列表。其他的功能就完全很少涉及到了。
鑒于此,我決定自己做一個(gè)小工具,花費(fèi)較小的系統(tǒng)代價(jià)來(lái)方便的查詢各種函數(shù)和模組的功能。這里只給出一個(gè)能使用的版本。開(kāi)放源代碼給大家,代碼風(fēng)格和控件設(shè)計(jì)可供初學(xué)者模仿。高手愿意來(lái)批評(píng)我,我洗耳恭聽(tīng)。后續(xù)版本也會(huì)發(fā)布在這里,到時(shí)候可能就先封裝之后在發(fā)布,現(xiàn)在發(fā)布的這個(gè)是源代碼文件,大家都知道,Python的源代碼文件雙擊即可執(zhí)行。
#coding=utf-8
#功能介紹:本軟件最初只用于模塊和函數(shù)用法的查詢,進(jìn)行快速的顯示
#擴(kuò)展功能:可以將查詢成功的結(jié)果保存到本地,
# 將里面的部分函數(shù)使用漢語(yǔ)進(jìn)行注釋之后的結(jié)果保存下來(lái)
# 以保存的關(guān)鍵字放于右側(cè)列表
#深度擴(kuò)展:使用數(shù)據(jù)庫(kù)保存結(jié)果,并提供增刪查改的接口
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):
#執(zhí)行,并獲取結(jié)果
info = self.inputStr.get()
if len(info)==0:
return True
buff =StringIO()
temp = sys.stdout #保存標(biāo)準(zhǔn)I/O流
sys.stdout = buff #將標(biāo)準(zhǔn)I/O流重定向到buff對(duì)象
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 #恢復(fù)標(biāo)準(zhǔn)I/O流buff.getvaue()
self.helpbtn.config(state=NORMAL)
def save(self):
#搜索,如果沒(méi)有找到就保存,使用ini文件進(jìn)行,保存數(shù)據(jù)
#保存原始
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函數(shù)查詢器')
self.master.iconname("calc1")
#左側(cè)列表,放置已保存的條目,按照字母順序排序
infoF = Frame(self)
infoF.pack(side=LEFT,expand=NO, fill=BOTH)
listF = Frame(infoF)
listF.pack(side=TOP,expand=YES, fill=BOTH)
#獲取項(xiàng)目
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)#使用鼠標(biāo)釋放消息
self.box.bind('<ButtonRelease-3>',self.boxrightmenu)#使用右鍵菜單刪除項(xiàng)目
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)
#顯示信息、滾動(dòng)條
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:
#數(shù)組/表/配置文件
sec = self.items[int(sels[0])]
self.box.delete(0, END)
self.items[int(sels[0])] = retval #數(shù)組
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):
# 選中列表時(shí), 顯示詳細(xì)內(nèi)容
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()
注意事項(xiàng),源代碼文件如果想要正確執(zhí)行,請(qǐng)自己建立一個(gè)readme.txt文件,和data.ini文件。否則將會(huì)因?yàn)檫@兩個(gè)文件打不開(kāi)而出錯(cuò)。為什么沒(méi)有使用異常處理呢?我沒(méi)有沒(méi)有完善到那一步。現(xiàn)在這個(gè)版本已經(jīng)可以使用了,所以大家不防試試看。
想要完整的所有文件,請(qǐng)點(diǎn)擊:附件下載 進(jìn)行下載。
【注意】:打開(kāi)軟件后,請(qǐng)輸入list、tuple、dict等類型進(jìn)行查詢,點(diǎn)擊新建保存即可保存到列表,供下次快速打開(kāi)。
有的包在源代碼中沒(méi)有包括,如codecs。這個(gè)時(shí)候你需要手動(dòng)的將這個(gè)包添加到源文件的開(kāi)頭,才能夠查詢到,如:import codecs。
如果你修改了顯示框中的文本,請(qǐng)及時(shí)點(diǎn)擊保存修改進(jìn)行保存,以便下次打開(kāi)還可以看到你修改的效果。
本版本并不完善,而且功能有限,本身基于Python做的,所以其價(jià)值還是作為Python開(kāi)發(fā)應(yīng)用實(shí)例為主。
有修改意見(jiàn)請(qǐng)留言。
2011-03-10 12:15:05
有網(wǎng)友反映不能夠正確執(zhí)行這個(gè)源代碼。我思考之后認(rèn)為,跟版本應(yīng)該沒(méi)有關(guān)系,這些都是很基本的函數(shù)和用法。你如果不能夠執(zhí)行,請(qǐng)你嘗試正確安裝Pmw和wx這兩個(gè)包。
1、Pmw的安裝方式為:
下載:Pmw.1.3.2.tar.gz。這個(gè)東西很好找,請(qǐng)百度一下即可。下載之后就地解壓,找到其中的“Pmw”目錄,將這個(gè)目錄復(fù)制到你Pyhton的安裝目錄下即可,不需要其他具體的目錄。直接是C:\Python27\下就可以,其他的Python版本請(qǐng)相應(yīng)的做出調(diào)整。
2、wx的安裝方式為:
下載:wxPython2.8-win32-unicode-2.8.11.0-py27.exe。這個(gè)東西請(qǐng)百度一下,估計(jì)到wxPython的官方的英文網(wǎng)站下載最好,很多中文網(wǎng)站也提供了下載,所以找到不是難事。雙擊進(jìn)行默認(rèn)方式的安裝即可,你不用改變目錄或者其他。它會(huì)自動(dòng)的安裝到你的安裝目錄下,我的目錄是:C:\Python27\Lib\site-packages\wx-2.8-msw-unicode。
3、Tkinter庫(kù)已經(jīng)系統(tǒng)集成,不需要安裝。主要是上面兩個(gè)庫(kù)即可。
4、如何檢驗(yàn)是否安裝正確?
安裝之后,請(qǐng)到Python的COMMAND LINE中輸入:import wx或者import Pmw嘗試是否輸入正確。沒(méi)有提示信息就是正確的。你還可以進(jìn)一步看看包中的信息,輸入如:dir(wx)或者dir(Pmw)。不推薦使用help()函數(shù),正如我上面所說(shuō),wx的信息多達(dá)10MB之多,你是顯示不完的,不斷刷屏的效果估計(jì)你不會(huì)喜歡。
但是,當(dāng)你離開(kāi)CMD,要利用IDLE或者要用Komodo Edit等軟件進(jìn)行“段式編程”的時(shí)候,就有些捉襟見(jiàn)肘了。例如,wx庫(kù)非常之大,幫助文件有10MB之多,如果你在CMD中打開(kāi),你可以想想你需要多少時(shí)間才能夠查看到你想要的幫助信息。大規(guī)模的熟悉Python的各種API之后,你會(huì)發(fā)現(xiàn),這個(gè)并不是想象的那么好用。不斷的按任意鍵進(jìn)行翻頁(yè),同時(shí)頁(yè)面內(nèi)能夠容納的頁(yè)面也有限。所以表現(xiàn)出非常大的不便之處。
這里大概有兩種方法解決。
第一,使用Module Docs工具
這個(gè)工具是Python GUI IDLE自帶的一個(gè)查詢幫助文件的方法。在里面可以利用網(wǎng)頁(yè)的形式,利用本機(jī)的本地功能,提供一個(gè)模擬在線的一個(gè)查詢方法。它可以打開(kāi)一個(gè)網(wǎng)頁(yè),上面可以顯示出所有的函數(shù),并帶有規(guī)范的分類,比較清楚,但是使用起來(lái)還是不方便,畢竟沒(méi)有搜索功能。如果將查到的網(wǎng)頁(yè)內(nèi)容保存鏈接,那么是不可以持續(xù)使用的。所以這個(gè)就有很大的問(wèn)題,同時(shí),其生成的網(wǎng)頁(yè)文件巨大,內(nèi)存太小是會(huì)給系統(tǒng)帶來(lái)壓力。所以這個(gè)方法并不是一個(gè)可以很方便使用的方法。
第二,自己開(kāi)發(fā)工具
其實(shí)我也不愿意自己開(kāi)發(fā)工具,因?yàn)檫@個(gè)畢竟需要時(shí)間,幾天時(shí)間或者幾個(gè)周的時(shí)間說(shuō)少也少,說(shuō)多也多,而且給自己的內(nèi)心產(chǎn)生的壓力也不小,畢竟需要分心不少來(lái)做這個(gè)事情。我在網(wǎng)上找了很長(zhǎng)時(shí)間,都沒(méi)有找到,對(duì)于wx,我找到一個(gè)wxPython API的英文文檔,上面介紹的很不清楚,非常模糊,直接列出了函數(shù)和具體的參數(shù),如何使用基本很少提及,而且很多控件的各種style也沒(méi)有詳細(xì)列舉出來(lái)。所以是很不好用的,如果是名字忘掉了,那還可以查一下完整的單詞和詳細(xì)的參數(shù)列表。其他的功能就完全很少涉及到了。
鑒于此,我決定自己做一個(gè)小工具,花費(fèi)較小的系統(tǒng)代價(jià)來(lái)方便的查詢各種函數(shù)和模組的功能。這里只給出一個(gè)能使用的版本。開(kāi)放源代碼給大家,代碼風(fēng)格和控件設(shè)計(jì)可供初學(xué)者模仿。高手愿意來(lái)批評(píng)我,我洗耳恭聽(tīng)。后續(xù)版本也會(huì)發(fā)布在這里,到時(shí)候可能就先封裝之后在發(fā)布,現(xiàn)在發(fā)布的這個(gè)是源代碼文件,大家都知道,Python的源代碼文件雙擊即可執(zhí)行。
復(fù)制代碼 代碼如下:
#coding=utf-8
#功能介紹:本軟件最初只用于模塊和函數(shù)用法的查詢,進(jìn)行快速的顯示
#擴(kuò)展功能:可以將查詢成功的結(jié)果保存到本地,
# 將里面的部分函數(shù)使用漢語(yǔ)進(jìn)行注釋之后的結(jié)果保存下來(lái)
# 以保存的關(guān)鍵字放于右側(cè)列表
#深度擴(kuò)展:使用數(shù)據(jù)庫(kù)保存結(jié)果,并提供增刪查改的接口
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):
#執(zhí)行,并獲取結(jié)果
info = self.inputStr.get()
if len(info)==0:
return True
buff =StringIO()
temp = sys.stdout #保存標(biāo)準(zhǔn)I/O流
sys.stdout = buff #將標(biāo)準(zhǔn)I/O流重定向到buff對(duì)象
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 #恢復(fù)標(biāo)準(zhǔn)I/O流buff.getvaue()
self.helpbtn.config(state=NORMAL)
def save(self):
#搜索,如果沒(méi)有找到就保存,使用ini文件進(jìn)行,保存數(shù)據(jù)
#保存原始
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函數(shù)查詢器')
self.master.iconname("calc1")
#左側(cè)列表,放置已保存的條目,按照字母順序排序
infoF = Frame(self)
infoF.pack(side=LEFT,expand=NO, fill=BOTH)
listF = Frame(infoF)
listF.pack(side=TOP,expand=YES, fill=BOTH)
#獲取項(xiàng)目
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)#使用鼠標(biāo)釋放消息
self.box.bind('<ButtonRelease-3>',self.boxrightmenu)#使用右鍵菜單刪除項(xiàng)目
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)
#顯示信息、滾動(dòng)條
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:
#數(shù)組/表/配置文件
sec = self.items[int(sels[0])]
self.box.delete(0, END)
self.items[int(sels[0])] = retval #數(shù)組
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):
# 選中列表時(shí), 顯示詳細(xì)內(nèi)容
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()
注意事項(xiàng),源代碼文件如果想要正確執(zhí)行,請(qǐng)自己建立一個(gè)readme.txt文件,和data.ini文件。否則將會(huì)因?yàn)檫@兩個(gè)文件打不開(kāi)而出錯(cuò)。為什么沒(méi)有使用異常處理呢?我沒(méi)有沒(méi)有完善到那一步。現(xiàn)在這個(gè)版本已經(jīng)可以使用了,所以大家不防試試看。
想要完整的所有文件,請(qǐng)點(diǎn)擊:附件下載 進(jìn)行下載。
【注意】:打開(kāi)軟件后,請(qǐng)輸入list、tuple、dict等類型進(jìn)行查詢,點(diǎn)擊新建保存即可保存到列表,供下次快速打開(kāi)。
有的包在源代碼中沒(méi)有包括,如codecs。這個(gè)時(shí)候你需要手動(dòng)的將這個(gè)包添加到源文件的開(kāi)頭,才能夠查詢到,如:import codecs。
如果你修改了顯示框中的文本,請(qǐng)及時(shí)點(diǎn)擊保存修改進(jìn)行保存,以便下次打開(kāi)還可以看到你修改的效果。
本版本并不完善,而且功能有限,本身基于Python做的,所以其價(jià)值還是作為Python開(kāi)發(fā)應(yīng)用實(shí)例為主。
有修改意見(jiàn)請(qǐng)留言。
2011-03-10 12:15:05
有網(wǎng)友反映不能夠正確執(zhí)行這個(gè)源代碼。我思考之后認(rèn)為,跟版本應(yīng)該沒(méi)有關(guān)系,這些都是很基本的函數(shù)和用法。你如果不能夠執(zhí)行,請(qǐng)你嘗試正確安裝Pmw和wx這兩個(gè)包。
1、Pmw的安裝方式為:
下載:Pmw.1.3.2.tar.gz。這個(gè)東西很好找,請(qǐng)百度一下即可。下載之后就地解壓,找到其中的“Pmw”目錄,將這個(gè)目錄復(fù)制到你Pyhton的安裝目錄下即可,不需要其他具體的目錄。直接是C:\Python27\下就可以,其他的Python版本請(qǐng)相應(yīng)的做出調(diào)整。
2、wx的安裝方式為:
下載:wxPython2.8-win32-unicode-2.8.11.0-py27.exe。這個(gè)東西請(qǐng)百度一下,估計(jì)到wxPython的官方的英文網(wǎng)站下載最好,很多中文網(wǎng)站也提供了下載,所以找到不是難事。雙擊進(jìn)行默認(rèn)方式的安裝即可,你不用改變目錄或者其他。它會(huì)自動(dòng)的安裝到你的安裝目錄下,我的目錄是:C:\Python27\Lib\site-packages\wx-2.8-msw-unicode。
3、Tkinter庫(kù)已經(jīng)系統(tǒng)集成,不需要安裝。主要是上面兩個(gè)庫(kù)即可。
4、如何檢驗(yàn)是否安裝正確?
安裝之后,請(qǐng)到Python的COMMAND LINE中輸入:import wx或者import Pmw嘗試是否輸入正確。沒(méi)有提示信息就是正確的。你還可以進(jìn)一步看看包中的信息,輸入如:dir(wx)或者dir(Pmw)。不推薦使用help()函數(shù),正如我上面所說(shuō),wx的信息多達(dá)10MB之多,你是顯示不完的,不斷刷屏的效果估計(jì)你不會(huì)喜歡。
您可能感興趣的文章:
- 使用python腳本實(shí)現(xiàn)查詢火車(chē)票工具
- python自動(dòng)化工具日志查詢分析腳本代碼實(shí)現(xiàn)
- 關(guān)于python tushare Tkinter構(gòu)建的簡(jiǎn)單股票可視化查詢系統(tǒng)(Beta v0.13)
- Python根據(jù)字典的值查詢出對(duì)應(yīng)的鍵的方法
- Python tkinter界面實(shí)現(xiàn)歷史天氣查詢的示例代碼
- python使用多線程查詢數(shù)據(jù)庫(kù)的實(shí)現(xiàn)示例
- python pymysql鏈接數(shù)據(jù)庫(kù)查詢結(jié)果轉(zhuǎn)為Dataframe實(shí)例
- Python并發(fā)請(qǐng)求下限制QPS(每秒查詢率)的實(shí)現(xiàn)代碼
- Python flask框架實(shí)現(xiàn)查詢數(shù)據(jù)庫(kù)并顯示數(shù)據(jù)
- 基于python實(shí)現(xiàn)查詢ip地址來(lái)源
- Python 制作查詢商品歷史價(jià)格的小工具
相關(guān)文章
python中watchdog文件監(jiān)控與檢測(cè)上傳功能
這篇文章主要介紹了python中watchdog文件監(jiān)控與檢測(cè)上傳功能,本文給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2020-10-10Python通過(guò)串口實(shí)現(xiàn)收發(fā)文件
這篇文章主要為大家詳細(xì)介紹了Python如何通過(guò)串口實(shí)現(xiàn)收發(fā)文件功能,文中的示例代碼簡(jiǎn)潔易懂,具有一定的借鑒價(jià)值,感興趣的小伙伴可以跟隨小編一起學(xué)習(xí)一下2023-11-11Python使用combinations實(shí)現(xiàn)排列組合的方法
今天小編就為大家分享一篇Python使用combinations實(shí)現(xiàn)排列組合的方法,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧2018-11-11詳解python如何在django中為用戶模型添加自定義權(quán)限
這篇文章主要介紹了python如何在django中為用戶模型添加自定義權(quán)限,小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧2018-10-10Python使用poplib模塊和smtplib模塊收發(fā)電子郵件的教程
smtplib模塊一般我們比較熟悉、這里我們會(huì)來(lái)講解使用smtplib發(fā)送SSL/TLS安全郵件的方法,而poplib模塊則負(fù)責(zé)處理接收pop3協(xié)議的郵件,下面我們就來(lái)看Python使用poplib模塊和smtplib模塊收發(fā)電子郵件的教程2016-07-07