代码转载自:https://www.jianshu.com/p/cf05e05930b7 ,还有其他的一些博客,加了比较详细注释
翻译功能用的有道的翻译。
仅供学习交流,严禁商用,如有侵权联系删除。
拷贝代码可以直接用,然后库的安装可以使用anaconda,以及pip,爬虫部分可以参考附录部分,里面对如何查看网页源码做了说明。以及为什么使用post以及发送和接受到的数据所在的preview和header。
import json
from tkinter import *
import requests
#【5.1】设置Button按下后触发的函数
def shurufanyineirong():
content = entry1.get().strip() #【5.2】把翻框里需要翻译的内容get过来
url = "http://fanyi.youdao.com/translate?smartresult=dict&smartresult=rule"#【5.3】这网址有变化,因为有反爬
data ={ #data是截图里的from data里的内容
'i': content,
'doctype': 'json'
}
r = requests.post(url,data=data)#【5.4】requests的post,和get的主要区别,个人觉得是post可以用来提交一些数据,看附录部分解释
ret = r.content.decode()
result = json.loads(ret)
#print(result)
res.set(result['translateResult'][0][0]['tgt'])#【5.5】把结果存入res变量,然后显示到entry2。如何从preview中得到翻译结果,看附录【3】部分
#print(content)
#【1】创建窗口master
master = Tk()
master.title('翻译软件')
#【2】设置窗口显示位置,+450+278这个是在桌面的相对位置
master.geometry('400x100+450+278')
#【3】设置标签
Label(master,text="输入任容:",font=('GB2312',18),fg='blue').grid(row=0,column=0)
Label(master,text="结果:",font=('GB2312',18),fg='blue').grid(row=1,column=0)
#【4】设置文本框
entry1 = Entry(master,font=('GB2312',18))
#【4.1】设置entry1所在行列
entry1.grid(row=0,column=1)
res = StringVar()
entry2 = Entry(master,font=('GB2312',18),textvariable=res)
#【4.2】设置entry2所在行列
entry2.grid(row=1,column=1)
#【5】设置按钮
Button(master,text="翻译",width=10,font=('GB2312',18),command=shurufanyineirong).grid(row=2,column=0,sticky=W)
Button(master,text="退出",width=10,font=('GB2312',18),command=master.quit).grid(row=2,column=1,sticky=E)
master.mainloop()
上面代码比较乱,可以直接复制下面的代码按需修改。
import json
from tkinter import *
import requests
def fanyi():
content = entry1.get().strip()#把翻框里需要翻译的内容get过来
url = "http://fanyi.youdao.com/translate?smartresult=dict&smartresult=rule"
data ={#data是截图里的from data里的内容
'i': content,
'doctype': 'json'
}
r = requests.post(url,data=data)#requests的post,和get的主要区别,个人觉得是post可以用来提交一些数据,看附录部分解释
ret = r.content.decode()
result = json.loads(ret)
#print(result)
res.set(result['translateResult'][0][0]['tgt'])
#print(content)
master = Tk()
master.title('翻译软件')
#小x,非大X
master.geometry('400x100+450+278')
#设置标签
Label(master,text="输入任容:",font=('GB2312',18),fg='blue').grid(row=0,column=0)
Label(master,text="结果:",font=('GB2312',18),fg='blue').grid(row=1,column=0)
#设置文本框
entry1 = Entry(master,font=('GB2312',18))
entry1.grid(row=0,column=1)
res = StringVar()
entry2 = Entry(master,font=('GB2312',18),textvariable=res)
entry2.grid(row=1,column=1)
#设置按钮
Button(master,text="翻译",width=10,font=('GB2312',18),command=fanyi).grid(row=2,column=0,sticky=W)
Button(master,text="退出",width=10,font=('GB2312',18),command=master.quit).grid(row=2,column=1,sticky=E)
master.mainloop()
附录:
【1】爬虫网页分析,打开有道翻译网页之后,按F12,然后点击翻译,看看network中的变化,然后按图中顺序即可。
【2】request 中的get and post 的区别
1.get方法是通过URL形式发送请求,是从服务器上获取数据,post是根据js的库jQuery的post方法向数据库发送请求数据,例如:登录界面,输入“用户名”“密码”登录系统;
2.get方法的URL长度限制为1024,post的要相对长些。
【3】上面截图中有preview的地方,可以得到翻译结果,这里是列表和字典的混合使用,t['translateResult'][0][0]['tgt'],
第一个[0]可以找到[[{tgt: "hello", src: "你好"}]],
第二个[0] 找到 {tgt: "hello", src: "你好"}
第三次 tgt找到 hello
【4】软件打包
pip install pyinstaller
pyinstaller -F -w UI.PY
========================================================
简单的画图
import math
import random
import numpy as np
import matplotlib
import matplotlib.pyplot as plt
x_axis = [794.28818799999999,
808.50958700000001,
826.25461900000005,
833.53230499999995,
841.97451199999989,
846.94015999999999,
851.69061199999987,
861.97213299999999,
874.92434100000003,
888.51824600000009]
y_axis = [79.877565000000004,
99.524317000000011,
62.525946999999995,
57.281737,
52.371316,
70.615566000000001,
47.351207000000002,
43.719923000000001,
40.642712000000003,
38.535789000000001]
plt.plot(x_axis, y_axis)
plt.show()
==================================================
动图显示
https://blog.csdn.net/u013468614/article/details/58689735
import matplotlib.pyplot as plt
import numpy as np
import time
from math import *
plt.ion() #开启interactive mode 成功的关键函数
plt.figure(1)
t = [0]
t_now = 0
m = [sin(t_now)]
for i in range(2000):
plt.clf() #清空画布上的所有内容
t_now = i*0.1
t.append(t_now)#模拟数据增量流入,保存历史数据
m.append(sin(t_now))#模拟数据增量流入,保存历史数据
plt.plot(t,m,'-r')
plt.pause(0.01)
=========================================================
原文链接:https://blog.csdn.net/qq_35077107/article/details/97619685
读取本地文件并显示
split举例:
line = 'step 0: dis loss 1.598912, gan loss 2.104217'
temp = line.split('loss ')
print(temp)
t = temp[1].split(',')
print(t[0])
print(temp[2])
其读取结果如下图所示
from matplotlib import pyplot as plt
filename = 'a.txt'
step, dis, gan = [], [], []
# 相比open(),with open()不用手动调用close()方法
with open(filename, 'r') as f:
# 将txt中的数据逐行存到列表lines里 lines的每一个元素对应于txt中的一行。然后将每个元素中的不同信息提取出来
lines = f.readlines()
# i变量,由于这个txt存储时有空行,所以增只读偶数行,主要看txt文件的格式,一般不需要
# j用于判断读了多少条,step为画图的X轴
i = 0
j = 0
for line in lines:
if i % 2 == 0:
temp = line.split('loss ')
t = temp[1].split(',')
step.append(j)
j = j + 1
dis.append(float(t[0]))
gan.append(float(temp[2]))
i = i + 1
else:
i = i + 1
fig = plt.figure(figsize=(10, 5)) # 创建绘图窗口,并设置窗口大小
# 画第一张图
ax1 = fig.add_subplot(211) # 将画面分割为2行1列选第一个
ax1.plot(step, dis, 'red', label='dis') # 画dis-loss的值,颜色红
ax1.legend(loc='upper right') # 绘制图例,plot()中的label值
ax1.set_xlabel('step') # 设置X轴名称
ax1.set_ylabel('Discriminator-loss') # 设置Y轴名称
# 画第二张图
ax2 = fig.add_subplot(212) # 将画面分割为2行1列选第二个
ax2.plot(step, gan, 'blue', label='gan') # 画gan-loss的值,颜色蓝
ax2.legend(loc='upper right') # loc为图例位置,设置在右上方,(右下方为lower right)
ax2.set_xlabel('step')
ax2.set_ylabel('Generator-loss')
plt.show() # 显示绘制的图
plt.figure()
plt.plot(step, dis, 'red', label='dis')
plt.plot(step, gan, 'blue', label='gan')
plt.legend()
plt.show()