利用requests、tkinter模块制作翻译小工具

利用XX翻译API接口

1、首先获取XX翻译api接口地址及数据

在这里插入图片描述
在这里插入图片描述

2、通过编译工具找出翻译后的字段:(找出规律后,封装函数,将query字段的vaule值替换为形参)
url = 'https://fanyi.baidu.com/transapi'
data = {
   "from":"zh",
   "to":"en",
   "query":"我爱",
   "transtype":"xxxxx",
   "simple_means_flag":"x",
   "sign":"xxxxx",
   "token":"xxxxxxxxxxxxxxxxxxxxxxxxxxxx",
   }
req = requests.post(url,data=data)
response = req.json()
print(response)
print(response["data"][0]["dst"])



def Chinese_to_English(keyword):
     url = 'https://fanyi.baidu.com/transapi'#百度翻译api地址
     data = {
         "from":"zh",#中
         "to":"en",#英
         "query":keyword,#翻译字段
         "transtype":"xxxxx",
         "simple_means_flag":"x",
         "sign":"xxxxxxxxxx",
         "token":"xxxxxxxxxxxxxxxxxxxxxxxx",
     }
     req = requests.post(url,data=data)#采用post方式获取数据
     response = req.json()#将返回的数据转换为json格式
     #print(type(response))
     #print(response["data"][0]["dst"])#取出数据中翻译后的英文
     return response['data'][0]['dst']
3、通过tkinter制作工具模板,将上面的函数功能块放入其中
import requests
import tkinter as tk

root = tk.Tk()
with open('tmp.ico','wb') as tmp:
    tmp.write(base64.b64decode(Icon().img))
root.iconbitmap('tmp.ico')
os.remove(('tmp.ico'))

root.title('翻译小工具')
root.geometry('400x200')#窗口大小,宽400,长200
f1 = tk.Label(root,text='请输入翻译内容:',fg='YellowGreen')#一个标签,提示操作
f1.grid(row=0,column=0)#指定标签1所在窗口的位置
t1 = tk.Text(root,width=56,height=5)#建立一个文本输入框
t1.grid(row=1,column=0)#文本输入框所在位置,默认所有组件只占用一列一行,从0开始
def Chinese_to_English():
    url = 'https://fanyi.baidu.com/transapi'
    data = {
        "from":"zh",
        "to":"en",
        "query":t1.get(0.0,'end'),#获取输入框的内容,从头(第0行第0列)到最后的内容都取出来
        "transtype":"xxxxx",
        "simple_means_flag":"x",
        "sign":"xxxxxxxxxx",
        "token":"xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx",
    }
    req = requests.post(url,data=data)
    response = req.json()
    t1.delete(0.0,'end')#清除输入框内容
    result = response['data'][0]['dst']#同时得要翻译的结果反馈给输入框,此时就要清除原来输入的内容
    t1.insert('end',result)#从最后插入
b1 = tk.Button(root,text='中译英',bg='Tan',fg='OrangeRed',command = Chinese_to_English)#创建按钮
b1.grid(row=2,column=0)
def English_to_Chinese():
    url = 'https://fanyi.baidu.com/transapi'
    data = {
        "from":"en",
        "to":"zh",
        "query":t1.get(0.0,'end'),
        "transtype":"xxxxxxxx",
        "simple_means_flag":"x",
        "sign":"xxxxxxxxxx",
        "token":"xxxxxxxxxxxxxxxxxxxxxxxxxxxxxx",
    }
    req = requests.post(url,data=data)
    response = req.json()
    #print(response["data"][0]["dst"])
    t1.delete(0.0,'end')
    result = response['data'][0]['dst']
    t1.insert('end',result)
b2 = tk.Button(root,text='英译中',bg='Tan',fg='OrangeRed',command = English_to_Chinese)#创建按钮
b2.grid(row=3,column=0)
def clear():
    t1.delete(0.0,'end')
b3 = tk.Button(root,text=' 清 除 ',bg='Gainsboro',fg='red',command = clear)#创建按钮
b3.grid(row=4,column=0)
root.mainloop()#让窗口停留在桌面

translation

打包后发现一个棘手的问题,就是讲窗口默认的羽毛图标换掉之后,是必须得电脑能够找到代码中指定的路径,也就是说拿到别的电脑上是会报错的

找了一天,找到一个方式解决

将图标文件写在一个模块中
准备:一个图标文件pen.ico

图标文件同目录下首先创建一个py文件,源码如下:

import base64
with open("icon.py","a") as f:
   f.write('class Icon(object):\n')
   f.write('\tdef __init__(self):\n')
   f.write("\t\tself.img='")
with open("pen.ico","rb") as i:
   b64str = base64.b64encode(i.read())
   with open("icon.py","ab+") as f:
       f.write(b64str)
with open("icon.py","a") as f:
   f.write("'")

此时,在同文件夹下产生一个icon.py的模块。把它保存在类当中是为了让我们要编译的py能够创建并调用之。

导入模块读出图标文件
在我们要编译成可执行文件的脚本中,用

from icon import Icon
import base64
import os
with open('tmp.ico','wb') as tmp:
    tmp.write(base64.b64decode(Icon().img))
root.iconbitmap('tmp.ico')
os.remove('tmp.ico')

代替脚本中类似下面这样的语句


root.iconbitmap('pen.ico')

总结
经过如上两步,就能在使用pyinstaller编译后正确的呈现自定义图标而且程序能够正常工作了。这种将文件在开发阶段编码后编译在可执行文件,到了程序运行的时候自动生成的方法也能够用到产生程序其他必要的文件中。

附上效果图
在这里插入图片描述

生成ico.py文件的样式
在这里插入图片描述

最后就是用pyinstaller工具进行打包
在这里插入图片描述
然后就可以脱离本地到任意电脑上进行使用了

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值