文字功能Python(楷体下拉框语言内容布局)「python 如何对下拉框进行文本输入」

导读本文主要介绍使用python和requests库实现翻译文字功能
项目介绍本文将创建一个程序用于自动识别语言并翻译
对于该程序,需要如下几个包:random、hashlib、urllib、requests、tkinter、pyautogui, 其中后三个包需要单独安装,前三个为python自带
了解过python的人多少都听说过 requests和tkinter库
requests是一个爬虫相关的库,用于访问网页并抓取网页标签,文本,头部文件等, tkinter是用于开发图形交互界面的一个标准库,可以很好的在Windows和Mac系统下运行, pyautogui是一个GUI自动化库, 常用功能有获取窗口大小,自动执行鼠标,键盘事件等
这是对项目和库的简短介绍,下面将详细介绍准备工作和实现步骤
准备工作01寻找合适的API从网上寻找到了4个免费API,分别是:(1)谷歌 API ,需要调用GitHub项目 ,毕竟是国外网站 ,使用起来较为不便 ,还要搭配专门的库pygoogletranslation, 并且该库存在部分问题, 需要修改库的相关源码, 开发难度较大
(2)DeepL API, 官网看上去很高级, 但不支持中国地区订阅
(3)百度 API, 调用简单, 官方文档简洁明了
(4)有道 API, 简洁, 第一次使用赠送虚拟货币用于体验有道云服务, 但翻译API每月都会进行收费, 如果只是用来练手或短期使用可以选择有道
本篇文章采用百度API进行讲解
02安装相关库#安装requestspip install requests#安装 tkinterpip install tkinter#安装pyautoguipip install pyautogui项目介绍01注册百度翻译开放平台(1)点击网页(https://fanyi-api.baidu.com/)右上角的登录按钮,并按流程完成注册
(2)注册登陆后在首页点击 “开发者信息”
(3)开发者类型选择 “个人开发者”,然后按照要求填好个人信息
(4)随后进入管理控制台, 在“总览”中点击“立即开通”
(5)紧接着先择 “通用文本翻译”
(6)按流程选择“标准版”, 也可以选择“高级版”,但需要实名认证
(7)随后只需填写应用名称即可提交申请
(8)申请成功后点击“开发者信息”查看 “APP ID”和“密钥”,记住这两段文本,随后会用到
注册完毕,接下来进入代码部分
02导入所需要的库import randomimport hashlibimport urllibimport requestsfrom tkinter import from tkinter import ttkimport pyautogui03对照API接口文档调用翻译服务, 获取关键信息API接口口文档:https://fanyi-api.baidu.com/product/113(1) API调用地址https://fanyi-api.baidu.com/api/trans/vip/translate(2) 获取头部请求参数(3) 生成签名规则(4) 查看可翻译语言(5)最后根据以上规则编写代码,代码如下:# 可用翻译语言,仅为展示,未全部列出LangList = { "自动检测":"auto", "中文":"zh", "英语":"en", "粤语":"yue", "文言文":"wyw", "日语":"jp", "韩语":"kor", "法语":"fra", "西班牙语":"spa", "泰语":"th", "阿拉伯语":"ara", "俄语":"ru", "葡萄牙语":"pt", "德语":"de", "意大利语":"it"}# 翻译函数def tranlate(q, fromLang="auto", toLang="zh"): q: --------- #需要被翻译的词句\n fromLang: ---------- #被翻译词句语言,默认为自动\n toLang: ---------- #需要被翻译成的语言,默认为zh(中文)\n appid = '你自己的appid' # appid secretKey = '你自己的应用密钥' # 密钥 salt = random.randint(32768, 65536) # 随机数,API需要 sign = hashlib.md5((appid + q + str(salt) + secretKey).encode()).hexdigest() # md5标签 # 完整访问地址,其中urllib.parse.quote函数将q转为ASCII码 myurl = 'appid=' + appid + '&q=' + urllib.parse.quote(q) + '&from=' + fromLang + '&to=' + toLang + '&salt=' + str(salt) + '&sign=' + sign res = requests.request("get",'https://api.fanyi.baidu.com/api/trans/vip/translate?', params=myurl) # 通过GET请求访问地址 # 返回页面内容 return res.json()此时可以调用以构建好的函数,查看程序是否能运行print(tranlate("你好",toLang="en"))# 运行结果:# PS E:\program> &E:/python/python.exe "e:/program/python/36/d. 百度翻译/Baidu.py"# {'from': 'zh', 'to': 'en', 'trans_result': [{'dst': 'hello', 'src': '你好'}]}得到的结果是可以运行,并且得到了一串json文本由此可知: “from”为被翻译文本的语言, “to”为目标语言, “trans_result”为翻译结果, “dst”为原文本内容, “src”为翻译内容
04优化输出结果,编写图形化界面# 获取信息并进行翻译def get_massage(fromLangList, toLangList, inputBox, outputBox): res = tranlate(inputBox.get("1.0","5.40").strip(), LangList[fromLangList.get()], LangList[toLangList.get()]) # 翻译 outputBox.configure(state='normal') # 恢复输出框读写功能 outputBox.delete("1.0","5.40") # 清空输入框 outputBox.insert(END, res["trans_result"][0]["dst"]) # 将翻译结果写入 outputBox.configure(state='disabled') # 关闭输出框读写功能# 创建视图def GUI(): tk = Tk() # 创建窗口 tk.resizable(width=False, height=False) # 禁止更改窗口大小 tk.title("百度翻译API") # 窗口名称 x,y = pyautogui.size() # 获取屏幕分辨率 tk.geometry("1200x500+{}+{}".format(x//2-600, y//2-250)) # 设置窗口大小和显示位置 # 创建下拉框 (输入语言) Label(tk, text="输入语言:", width=15, font=('楷体', 20)).grid(row=1,column=1) # 引导内容 fromLangList = ttk.Combobox(tk,width=20, font=('楷体', 20)) # 创建下拉框对象 fromLangList["value"] =tuple(tuple(LangList.keys())) # 设置下拉框数值 fromLangList["state"] ='readonly' # 设置下拉框状态为只读 fromLangList.current(0) # 设置下拉框默认值 fromLangList.grid(row=1,column=2) # 设置布局 # 创建下拉框 (输出语言) Label(tk, text="输出语言:", width=15, font=('楷体', 20)).grid(row=2,column=1) # 引导内容 toLangList = ttk.Combobox(tk,width=20, font=('楷体', 20)) # 创建下拉框对象 toLangList["value"] =tuple(tuple(LangList.keys())[1::]) # 设置下拉框数值 toLangList["state"] ='readonly' # 设置下拉框状态为只读 toLangList.current(0) # 设置下拉框默认值 toLangList.grid(row=2,column=2) # 设置布局 # 创建输入框 Label(tk, text="输入框:", font=('楷体', 20)).grid(row=3, column=1) # 引导内容 inputBox = Text(tk, width=40, height=4, font=('楷体', 20)) # 设置多行文本框 inputBox.grid(row=3, column=2) # 设置布局 # 创建输出框 Label(tk, text="输出框:", font=('楷体', 20)).grid(row=4, column=1) # 引导内容 outputBox = Text(tk, width=40, height=4, font=('楷体', 20)) # 设置多行文本框 outputBox.grid(row=4, column=2) # 设置布局 outputBox.configure(state='disabled') # 翻译按钮 f_b = Button(tk, text="翻译", bg="grey", font=('楷体', 20), command=lambda:get_massage(fromLangList, toLangList, inputBox, outputBox)) # 设置按钮 f_b.grid(row=5, column=2, sticky="n") # 设置布局 tk.mainloop() # 保持窗口开启GUI()05完整代码和使用效果展示import randomimport hashlibimport urllibimport requestsfrom tkinter import from tkinter import ttkimport pyautogui# 可用翻译语言,仅为展示未全部列出LangList = { "自动检测":"auto", "中文":"zh", "英语":"en", "粤语":"yue", "文言文":"wyw", "日语":"jp", "韩语":"kor", "法语":"fra", "西班牙语":"spa", "泰语":"th", "阿拉伯语":"ara", "俄语":"ru", "葡萄牙语":"pt", "德语":"de", "意大利语":"it"}# 翻译def tranlate(q, fromLang="auto", toLang="zh"): """ q: --------- 需要被翻译的词句\n fromLang: --------- 被翻译词句语言,默认为自动\n toLang: --------- 需要被翻译成的语言,默认为zh(中文)\n """ appid = '你自己的appid' # appid secretKey = '你自己的应用密钥'# 密钥 myurl = '/api/trans/vip/translate' #API地址 salt = random.randint(32768, 65536) # 随机数,API需要 sign = hashlib.md5((appid + q + str(salt) + secretKey).encode()).hexdigest() # md5标签 # 完整访问地址,其中urllib.parse.quote函数将q转为ASCII码 myurl = 'appid=' + appid + '&q=' + urllib.parse.quote(q) + '&from=' + fromLang + '&to=' + toLang + '&salt='+ str(salt) + '&sign=' + sign res = requests.request("get",'https://api.fanyi.baidu.com/api/trans/vip/translate?', params=myurl) # 通过GET请求访问地址 # 返回页面内容return res.json()# 获取信息并进行翻译def get_massage(fromLangList, toLangList, inputBox, outputBox): res = tranlate(inputBox.get("1.0","5.40").strip(), LangList[fromLangList.get()], LangList[toLangList.get()]) # 翻译 outputBox.configure(state='normal') # 恢复输出框读写功能 outputBox.delete("1.0","5.40") # 清空输入框 outputBox.insert(END, res["trans_result"][0]["dst"]) # 将翻译结果写入 outputBox.configure(state='disabled') # 关闭输出框读写功能# 创建视图def GUI(): tk = Tk() # 创建窗口 tk.resizable(width=False, height=False) # 禁止更改窗口大小 tk.title("百度翻译API") # 窗口名称 x,y = pyautogui.size() # 获取屏幕分辨率 tk.geometry("1200x500+{}+{}".format(x//2-600, y//2-250)) # 设置窗口大小和显示位置 # 创建下拉框 (输入语言) Label(tk, text="输入语言:", width=15, font=('楷体', 20)).grid(row=1,column=1) # 引导内容 fromLangList = ttk.Combobox(tk,width=20, font=('楷体', 20)) # 创建下拉框对象 fromLangList["value"] =tuple(tuple(LangList.keys())) # 设置下拉框数值 fromLangList["state"] ='readonly' # 设置下拉框状态为只读 fromLangList.current(0) # 设置下拉框默认值 fromLangList.grid(row=1,column=2) # 设置布局 # 创建下拉框 (输出语言) Label(tk, text="输出语言:", width=15, font=('楷体', 20)).grid(row=2,column=1) # 引导内容 toLangList = ttk.Combobox(tk,width=20, font=('楷体', 20)) # 创建下拉框对象 toLangList["value"] =tuple(tuple(LangList.keys())[1::]) # 设置下拉框数值 toLangList["state"] ='readonly' # 设置下拉框状态为只读 toLangList.current(0) # 设置下拉框默认值 toLangList.grid(row=2,column=2) # 设置布局 # 创建输入框 Label(tk, text="输入框:", font=('楷体', 20)).grid(row=3, column=1) # 引导内容 inputBox = Text(tk, width=40, height=4, font=('楷体', 20)) # 设置多行文本框 inputBox.grid(row=3, column=2) # 设置布局 # 创建输出框 Label(tk, text="输出框:", font=('楷体', 20)).grid(row=4, column=1) # 引导内容 outputBox = Text(tk, width=40, height=4, font=('楷体', 20)) # 设置多行文本框 outputBox.grid(row=4, column=2) # 设置布局 outputBox.configure(state='disabled') # 翻译按钮 f_b = Button(tk, text="翻译", bg="grey", font=('楷体', 20), command=lambda:get_massage(fromLangList, toLangList, inputBox, outputBox)) # 设置按钮 f_b.grid(row=5, column=2, sticky="n") # 设置布局 tk.mainloop() # 保持窗口开启GUI()
文字功能Python(楷体下拉框语言内容布局)
(图片来源网络,侵删)

联系我们

在线咨询:点击这里给我发消息