ホームページ > バックエンド開発 > Python チュートリアル > Butong の自作 Python 関数ヘルプクエリツール

Butong の自作 Python 関数ヘルプクエリツール

WBOY
リリース: 2016-06-16 08:47:15
オリジナル
1237 人が閲覧しました

たとえば、list、tuple、dict、str、os、sys などのモジュールを学習する場合、Python 独自のドキュメントを使用して、それらの処理関数を迅速かつ包括的に学習できます。したがって、この組み込みのドキュメント機能は研究者に大きな利便性をもたらし、短期間の開発には最適です。

ただし、CMD を離れて IDLE を使用したり、「セグメント プログラミング」に Komodo Edit などのソフトウェアを使用したりする場合は、少し無理が​​生じます。たとえば、wx ライブラリは非常に大きく、ヘルプ ファイルは 10MB あります。これを CMD で開くと、必要なヘルプ情報を表示するのにどれくらいの時間がかかるかを考えることができます。 Python のさまざまな API を大規模に理解すると、これが想像していたほど使いにくいことがわかるでしょう。いずれかのキーを押し続けるとページがめくられますが、ページ内に収容できるページ数にも制限があります。ですので、大変ご迷惑をおかけしております。

この問題を解決するには、おそらく 2 つの方法があります。

まず、Module Docs ツールを使用します。

このツールは、Python GUI IDLE に付属するヘルプ ファイルをクエリする方法です。その中で、Web ページの形式を使用し、マシンのローカル機能を使用して、シミュレートされたオンライン クエリ方法を提供できます。 Web ページを開くことができ、すべての機能を標準化された分類で表示でき、比較的明確ですが、検索機能がないため、やはり使いにくいです。検索したWebページコンテンツへのリンクを保存すると、継続して利用することができなくなります。したがって、これは大きな問題であると同時に、生成される Web ページ ファイルが大きく、メモリが少なすぎるため、システムに負担がかかります。したがって、この方法はあまり便利な方法ではありません。

次に、独自のツールを開発します

実際、私は独自のツールを開発する気はありません。結局のところ、これには時間がかかり、数日から数日かかります。たとえそれが少なくても、それ以上であるとも言えますし、結局のところ、これを行うには多くの気を散らす必要があります。長い間オンラインで検索しましたが、見つかりませんでした。wx については、wxPython API の英語のドキュメントを見つけました。これは、関数と特定のパラメーターを直接リストしたもので、基本的には非常に曖昧です。その使用方法に関する情報はほとんど記載されておらず、多くのコントロールのさまざまなスタイルについては詳細が記載されていません。そのため、名前を忘れた場合は、完全な単語と詳細なパラメータのリストを確認することもできます。他の機能が関与することはほとんどありません。

これを考慮して、さまざまな関数やモジュールの機能を低システムコストで便利にクエリできる小さなツールを自分で作成することにしました。ここでは使用可能なバージョンを 1 つだけ示します。ソース コードは誰でも公開されており、コード スタイルとコントロールの設計は初心者でも真似できます。専門家は喜んで私を批判してくれますし、私も耳を傾けます。後続のバージョンもここでリリースされる可能性があります。現在リリースされているソース コード ファイルは、ダブルクリックするだけで実行できます。

コードをコピー コードは次のとおりです:

#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,lief=SUNKEN, textvariable=self.inputStr)
self.entry.bind("", self.inputreturn)
self.entry.pack(side=LEFT, Expand=YES, fill=BOTH)

self.fidbtn = Button(inputF,text=u'查找',command=self.OnFind)
self.fidbtn.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 '選択なし'
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,'削除成功。')


def renameitem(self,event=None,en=None):
#邮件菜单, 重命名功能
retval = askstring("input",
"新しい名前を入力してください:")
if len(retval)==0:
return
sels = self.box.curselection()
if len(sels) == 0:
pass #print '選択なし'
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,'名前変更成功。')


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

defmodify(self,event=None,en=None):
self.saveasbtn.config(state=NORMAL)
return True

def inputreturn(self,event=None,en=None):
self.OnFind()
return True

def selectCommand(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__':
ファインダー().mainloop()

注: ソース コード ファイルを正しく実行したい場合は、readme.txt ファイルと data.ini ファイルを自分で作成してください。そうしないと、これら 2 つのファイルを開くことができないため、エラーが発生します。例外処理が使用されないのはなぜですか?そこまで完璧にはしていません。このバージョンは現在利用可能ですので、ぜひ試してみてください。
すべての完全なファイルについては、「添付ファイルのダウンロード」をクリックしてダウンロードしてください。
[注]: ソフトウェアを開いた後、クエリするリスト、タプル、辞書などのタイプを入力し、[新規保存] をクリックしてリストに保存し、次回すぐに開くことができます。
コーデックなど、一部のパッケージはソース コードに含まれていません。現時点では、インポート コーデックなどのクエリを実行するには、このパッケージをソース ファイルの先頭に手動で追加する必要があります。
表示ボックス内のテキストを変更した場合は、[変更を保存] をクリックして保存し、次回開いたときに変更の効果を確認できるようにしてください。
このバージョンは完全ではなく、機能が制限されているため、主に Python 開発アプリケーションの例として使用されます。
変更コメントがある場合はメッセージを残してください。
2011-03-10 12:15:05
一部のネチズンは、このソース コードを正しく実行できないと報告しました。よく考えてみると、バージョンは関係ないと思います。これらは非常に基本的な機能と使い方です。実行できない場合は、Pmw および wx パッケージを正しくインストールしてみてください。
1. Pmw のインストール方法は次のとおりです:
ダウンロード: Pmw.1.3.2.tar.gz。これは簡単に見つかります。Baidu で検索してください。ダウンロード後、その場で解凍し、「Pmw」ディレクトリを見つけて、このディレクトリを Python のインストール ディレクトリにコピーします。他の特定のディレクトリは必要ありません。 「C:Python27」をクリックするだけです。他の Python バージョンの場合は、それに応じて調整してください。
2. wx のインストール方法は次のとおりです:
ダウンロード: wxPython2.8-win32-unicode-2.8.11.0-py27.exe。これについては、Baidu を検索してください。wxPython の英語の公式 Web サイトからダウンロードするのが最善であると考えられます。多くの中国語 Web サイトでもダウンロードが提供されているため、見つけるのは難しくありません。ダブルクリックするだけでデフォルトの方法でインストールできます。ディレクトリなどを変更する必要はありません。これは、インストール ディレクトリに自動的にインストールされます。私のディレクトリは C:Python27Libsite-packageswx-2.8-msw-unicode です。
3. Tkinter ライブラリはシステムに統合されており、インストールは必要ありません。主に上記2つのライブラリが利用可能です。
4. 正しくインストールされているかどうかを確認するにはどうすればよいですか?
インストール後、Python のコマンドライン import wx または import Pmw を入力して、入力が正しいかどうかを確認してください。プロンプトメッセージが表示されない場合は正常です。 dir (wx) または dir (Pmw) を入力して、パッケージ内の情報をさらに確認することもできます。 help() 関数を使用することはお勧めできません。wx の情報は 10MB もあり、すべてを表示することはできません。画面を常に更新することは好ましくありません。
関連ラベル:
ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート