080-翻译小软件

代码转载自: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()

 

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值