Python以其极其丰富的模块著称,如何学习这些模块呢,首先要认识模块下有哪些变量(主要是类)和方法,然后这些类变量下面又有哪些变量和方法。总之就是类套类连环套,这个工具就是方便分析这么一个套套。
这是代码:(要pip install quicktranslate 以实现翻译功能)
#-*- coding:utf-8 -*-
import requests,time,datetime
import tkinter as tk #使用Tkinter前需要先导入
from tkinter import filedialog,messagebox,ttk
import importlib,sys
from quicktranslate import get_translate_baidu,get_translate_youdao,get_translate_google
class MY_GUI(tk.Tk):
#初始化
def __init__(self):
super().__init__()
self.set_window()
self.set_frame()
self.set_body()
#设置窗口
def set_window(self):
self.title("python模块解析工具") #窗口名
w_width=1200 #工具宽度
w_height=800 #工具高度
scn_width=self.maxsize()[0] #屏幕宽度
x_point=(scn_width-w_width)//2 #取点让工具居中
self.geometry('%dx%d+%d+%d' %(w_width,w_height,x_point,100))
self.tk_focusFollowsMouse()
self.bind("<Escape>",lambda event:window.iconify())
#设置框架
def set_frame(self):
self.frame1=tk.Frame(self,pady=15,padx=15)
self.frame1.grid(row=0,column=0,sticky='w')
self.frame2=tk.Frame(self,pady=15,padx=15)
self.frame2.grid(row=1,column=0,sticky='w')
self.frame3=tk.Frame(self,pady=15,padx=15)
self.frame3.grid(row=2,column=0,sticky='w')
#设置组件
def set_body(self):
modname=tk.StringVar()
ttk.Label(self.frame1,text="输入模块名称:").grid(row=0,column=0,sticky='w')
ttk.Entry(self.frame1,textvariable=modname).grid(row=0,column=1,sticky='w')
ttk.Button(self.frame1,text="获取模块所有的属性",command=lambda:self.getmodinfo(modname.get())).grid(row=0,column=2,sticky='w')
#功能函数
def getmodinfo(self,mod): #参数为模块名称
try:
obj = importlib.import_module(mod)
except Exception as e:
messagebox.showerror('错误',e)
return False
attrlist=[]
for item in dir(obj):
if not item.startswith('__'):
attrlist.append(item)
var=tk.StringVar()
chosen=ttk.Combobox(self.frame2,textvariable=var)
chosen.grid(row=0,column=0,sticky='w')
chosen['values']=attrlist
chosen.current(0)
chosen.bind("<<ComboboxSelected>>",lambda event:self.getattrinfo(event,var.get(),obj))
def getattrinfo(self,event,attr,obj): #参数为模块下的属性名称
cnt=getattr(obj,attr) #模块下的变量
ybar0=ttk.Scrollbar(self.frame2,orient='vertical') #竖直滚动条
listbox=tk.Listbox(self.frame2,yscrollcommand=ybar0.set,selectmode=tk.BROWSE,height=20)
ybar0['command']=listbox.yview #和listbox联动
for item in dir(cnt):
if not item.startswith('__'):
listbox.insert(0,item)
listbox.grid(row=1,column=0,sticky='w')
ybar0.grid(row=1,column=1,sticky='ns')
listbox.bind('<Double-Button-1>',lambda event:self.getdetail(event,listbox,cnt))
out=sys.stdout
with open('dump.txt','w') as f: #help cnt 输出到文件
sys.stdout=f
help(cnt)
sys.stdout=out
ybar=ttk.Scrollbar(self.frame2,orient='vertical') #模块下变量的帮助详情
textarea=tk.Text(self.frame2,width=125,height=25,yscrollcommand=ybar.set)
ybar['command']=textarea.yview
textarea.grid(row=1,column=2,sticky='w')
ybar.grid(row=1,column=3,sticky='ns')
with open('dump.txt','r') as f:
textarea.insert(1.0,f.read())
def getdetail(self,event,lb,cnt):
funcname=lb.get(lb.curselection()) #要查询的函数
func=getattr(cnt,funcname)
out=sys.stdout
with open('dump1.txt','w') as f: #help func 输出到文件
sys.stdout=f
help(func)
sys.stdout=out
with open('dump1.txt','r') as f: #读取文件
text_f=f.read()
ybar1=ttk.Scrollbar(self.frame3,orient='vertical') #左边的文本框
ybar2=ttk.Scrollbar(self.frame3,orient='vertical') #右边的文本框
textarea1=tk.Text(self.frame3,width=70,height=23,yscrollcommand=ybar1.set) #area1->ybar2
textarea2=tk.Text(self.frame3,width=70,height=23,yscrollcommand=ybar2.set)
ybar1['command']=textarea1.yview
ybar2['command']=textarea2.yview
textarea1.grid(row=0,column=0,sticky='w')
ybar1.grid(row=0,column=1,sticky='ns')
ttk.Button(self.frame3,width=5,text="翻译",command=lambda:self.translate(text_f,textarea2)).grid(row=0,column=2)
textarea2.grid(row=0,column=3,padx=10)
ybar2.grid(row=0,column=4,sticky='ns')
textarea1.insert(1.0,text_f)
def translate(self,text_f,textarea2):
test_url='http://youdao.com'
try:
requests.get(test_url,timeout=2)
except:
return ''
texts=text_f.split('\n') #段落分割
strs=""
for paragraph in texts:
if(paragraph):
sentences=paragraph.split('.') #句子
for sentence in sentences:
if(sentence):
strs+=get_translate_youdao(sentence)+"."
strs+="\n"
textarea2.insert(1.0,strs)
app=MY_GUI()
app.mainloop()
效果如图 这里以解析Pandas模块为例 Pandas下面有DataFrame的类,然后这个类下面一堆方法。附带翻译功能 当然 翻译是很不准的 仅供参考