发布时间:2018-11-01
技术:pygame+easygui

概述

实现一个翻译功能,中英文的互相转换。并可以播放翻译后的内容。 翻译接口调用的是百度翻译的api接口。

详细

代码下载:http://www.demodashi.com/demo/14326.html

一、需求分析

使用pygame实现一个翻译功能,并可以播放翻译内容。(模仿百度翻译做一个简单的demo)

二、程序实现

1、初始化pygame环境,声明出页面

def renderText(text, position, view=screen):# 设置字体样式大小my_font = pygame.font.SysFont("SimHei", 25)# 渲染文字text = my_font.render(text, True, (255, 255, 255))view.blit(text, position)

2、利用easygui弹出框实现内容输入

 import easygui as g   mg = g.enterbox('需要翻译的内容', title='翻译') # 文本输入框

3、将输入的内容显示到页面上

def text(self, text):global inputstrself.strtext = textprint("验证 输入的内容呀:" + self.strtext)renderText(self.strtext, (500, 100))inputstr = self.strtextprint("inputstr:" + inputstr)

4、翻译功能的实现

翻译的实现,主要是向百度的翻译HTTP接口提交数据,然后获得返回,

实现如下:

def GetResult(self):q = self.strtext  # 获取输入的内容# 判断用户是否输入了内容if q == "":print("请先输入内容")self.content.append("")else:print("输入的语句:" + q)url = 'http://api.fanyi.baidu.com/api/trans/vip/translate'salt = str(random.randint(32768, 65536))sigin = self._appid + q + salt + self._keyprint(sigin)m1 = hashlib.md5()m1.update(sigin.encode('utf8'))sign = m1.hexdigest()print("加密更新后的:" + sign)myurl = ""  # 防止出现myurl未定义错误for ch in q.encode('utf8'):if ch > 127:myurl = url + '?q=' + urllib.parse.quote(q) + '&from=' + str(self._to) + '&to=' + str(self._from)+'&appid=' + str(self._appid) + '&salt=' + str(salt)+'&sign=' + signelse:myurl = url + '?q=' + urllib.parse.quote(q) + '&from=' + str(self._from) + '&to=' + str(self._to)+'&appid=' + str(self._appid) + '&salt=' + str(salt)+'&sign=' + signresponse = requests.get(myurl)data = response.json()print(data)length = len(data['trans_result'])print(len(data['trans_result']))print_content = ""  # 存放翻译后的内容for i in range(0, length):if i == 0:  # 防止第一行就出现换行print_content = data['trans_result'][i]['dst']else:print_content = print_content + " \n" + (data['trans_result'][i]['dst'])print("翻译后的内容:" + print_content)# self.t.delete(0.0, END)  # 删除之前翻译出的内容if self.content:  # 判断self.content中是否存有之前翻译的内容,如果有,清空self.content.clear()self.content.append(print_content)

5、显示翻译后的内容

def showTextAfterTrans(self):global afterTransTextrenderText(self.afterTransText, (500, 350))afterTransText = self.afterTransText

6、语音播放功能

自己申请一个百度AI接口就可以

def voice():# 百度AI接口APP_ID = 'XX'API_KEY = 'XXXX'SECRET_KEY = 'XXXX'client = AipSpeech(APP_ID, API_KEY, SECRET_KEY)global afterTransTextq = afterTransText.strip()print("语音播放函数:")print(q)result = client.synthesis(q, 'zh', 4, {'vol': 5})print(result)# 识别正确返回语音二进制 错误则返回dictif not isinstance(result, dict):with open('audio.mp3', 'wb') as f:f.write(result)f.close()os.system('audio.mp3')

为了方便看清楚整个思路实现过程,贴出整体代码如下:

# utf-8
import pygame
import random
import hashlib
import urllib
import requests
from aip import AipSpeech
import os
import easygui as g
from pygame.locals import *# 初始化pygame环境
pygame.init()
# 创建窗口
# screen = pygame.display.set_mode((1280, 720))
screen = pygame.display.set_mode((1400, 750))
# 背景图片
background = pygame.image.load("background.png").convert()
# 转换语言按钮图片
buttonimage = "btnlanchange.png"
# 翻译按钮图片
btntransimage = "btntranslate.png"
# 语音播放按钮图片
btnvoiceimage = "btnvoice.png"
# 清除内容按钮图片
btnclearimage = "btnclear.png"
# 翻译后的内容
afterTransText = ""font = pygame.font.SysFont('simsunnsimsun',30)flag = False
btnx = 0  # 图片位置X坐标
btny = 0  # 图片位置Y坐标
w = 0  # 获取到的按钮图片的宽度
h = 0  # 获取到的按钮图片的高度
inputstr = ""  # 通过弹出框输入的内容
mg = "" # 弹框输入的内容# 按钮类
class Button(object):def __init__(self, bimage, position):self.buttonimage = pygame.image.load(bimage).convert()self.position = positiondef render(self):global btnx, btny, w, hw, h = self.buttonimage.get_size()  # 获取图片的长和宽# print("wh:")# print(w, h)x, y = self.position  # 获取传入的位置参数# print("xy:" + str(x), str(y))btnx = x - w / 2  # 最终画出的位置x坐标btny = y - h / 2  # 最终画出的位置y坐标# print("画图片时的btnx,btny:")# print(btnx, btny)screen.blit(self.buttonimage, (btnx, btny))'''经输出验证:翻译按钮在画布上的坐标(825.0,255.0);语言转换按钮在画布上的坐标(620.0,52.5)语音播放按钮在画布上的坐标(825.0,375.0);清除按钮在画布上的坐标(825.0,98.0)'''# 创建转换按钮button对象
button = Button(buttonimage, (665, 65))
# 创建翻译按钮btntranslate对象
btntranslate = Button(btntransimage, (850, 280))
# 创建语音播放按钮btnvoice对象
btnvoice = Button(btnvoiceimage, (850, 400))
# 创建文字清除按钮btnclear对象
btnclear = Button(btnclearimage, (850, 120))# 写文字方法
def renderText(text, position, view=screen):# 设置字体样式大小my_font = pygame.font.SysFont("SimHei", 25)# 渲染文字text = my_font.render(text, True, (255, 255, 255))view.blit(text, position)# 显示源语言和目标语言
def language():global flagif not flag:renderText("英文", (550, 50))renderText("中文", (730, 50))else:renderText("中文", (550, 50))renderText("英文", (730, 50))# 源语言与目标语言转换按钮函数
def changeLan():global flagif flag:flag = Falseprint(flag)else:flag = Trueprint(flag)# 翻译实现类
class Translate:def __init__(self):self.strtext = ""self.afterTransText = ""self.content = []  # 定义空数组存放取到的内容self._from = 'en'self._to = 'zh'self._appid = '自己申请的id'self._key = '自己申请的key'# 输入内容的函数def text(self, text):global inputstrself.strtext = textprint("验证 输入的内容呀:" + self.strtext)renderText(self.strtext, (500, 100))inputstr = self.strtextprint("inputstr:" + inputstr)# 触发的翻译函数def afterTrans(self):self.GetResult()self.afterTransText = " "  # 执行一次清空一次print("验证清空吗?:" + self.afterTransText)for item in self.content:self.afterTransText = self.afterTransText + itemprint("我是翻译完要显示的字符串呀:" + self.afterTransText)# 存储并显示 翻译完的 句子的函数(防止点击翻译,显示完内容后 被刷新冲掉)def showTextAfterTrans(self):global afterTransTextrenderText(self.afterTransText, (500, 350))afterTransText = self.afterTransText# 抓取翻译后返回的数据def GetResult(self):q = self.strtext  # 获取输入的内容# 判断用户是否输入了内容if q == "":print("请先输入内容")self.content.append("")else:print("输入的语句:" + q)url = 'http://api.fanyi.baidu.com/api/trans/vip/translate'salt = str(random.randint(32768, 65536))sigin = self._appid + q + salt + self._keyprint(sigin)m1 = hashlib.md5()m1.update(sigin.encode('utf8'))sign = m1.hexdigest()print("加密更新后的:" + sign)myurl = ""  # 防止出现myurl未定义错误for ch in q.encode('utf8'):if ch > 127:myurl = url + '?q=' + urllib.parse.quote(q) + '&from=' + str(self._to) + '&to=' + str(self._from) + '&appid=' + str(self._appid) + '&salt=' + str(salt) + '&sign=' + signelse:myurl = url + '?q=' + urllib.parse.quote(q) + '&from=' + str(self._from) + '&to=' + str(self._to) + '&appid=' + str(self._appid) + '&salt=' + str(salt) + '&sign=' + signresponse = requests.get(myurl)data = response.json()print(data)length = len(data['trans_result'])print(len(data['trans_result']))print_content = ""  # 存放翻译后的内容for i in range(0, length):if i == 0:  # 防止第一行就出现换行print_content = data['trans_result'][i]['dst']else:print_content = print_content + " \n" + (data['trans_result'][i]['dst'])print("翻译后的内容:" + print_content)# self.t.delete(0.0, END)  # 删除之前翻译出的内容if self.content:  # 判断self.content中是否存有之前翻译的内容,如果有,清空self.content.clear()self.content.append(print_content)# 语音播放函数
def voice():# 百度AI接口APP_ID = '自己申请的id'API_KEY = '自己申请的key'SECRET_KEY = '自己申请的秘钥'client = AipSpeech(APP_ID, API_KEY, SECRET_KEY)global afterTransTextq = afterTransText.strip()print("语音播放函数:")print(q)result = client.synthesis(q, 'zh', 4, {'vol': 5})print(result)# 识别正确返回语音二进制 错误则返回dictif not isinstance(result, dict):with open('audio.mp3', 'wb') as f:f.write(result)f.close()os.system('audio.mp3')# 删除已输入内容函数
def clear():global inputstrinputstr = "点此输入需要翻译的内容"# 创建translate的对象
translate = Translate()def start():global flag  # 语言状态标志isFirst = Truewhile True:# 显示背景图screen.blit(background, (0, 0))# 显示翻译按钮图片btntranslate.render()# 显示语言栏language()# 显示语言转换按钮button.render()# 显示语音播放按钮btnvoice.render()# 显示清除按钮btnclear.render()# 显示输入的文本# translate.text()if isFirst:renderText("点击此处输入翻译的内容", (500, 100))else:renderText(inputstr, (500, 100))# 显示翻译后的文本内容translate.showTextAfterTrans()pygame.display.update()for event in pygame.event.get():if event.type == pygame.QUIT:  # 监测是否按下退出按钮pygame.quit()exit()elif event.type == pygame.MOUSEBUTTONDOWN:  # 判断鼠标是否按下pressed_array = pygame.mouse.get_pressed()if pressed_array:pos = pygame.mouse.get_pos()  # 取到鼠标的坐标位置mouse_x = pos[0]mouse_y = pos[1]print("鼠标点击坐标:")print(mouse_x, mouse_y)# 判断鼠标位置是否在 转换 按钮范围内if 620.0 <= mouse_x <= 710.0 and 52.5 <= mouse_y <= 77.5:print('我是语言转换按钮呀...')  # 点击后触发的函数changeLan()  # 调用源语言与目标语言转换栏# 判断鼠标坐标位置是否属于 翻译 按钮的坐标位置elif 825.0 <= mouse_x <= 875.0 and 255.0 <= mouse_y <= 305.0:print("我是翻译按钮呀...")translate.afterTrans()# 判断鼠标坐标位置是否属于 语音播放 按钮的坐标位置elif 825.0 <= mouse_x <= 875.0 and 375.0 <= mouse_y <= 425.0:print("我是播放语音按钮呀...")voice()elif 825.0 <= mouse_x <= 875.0 and 98.0 <= mouse_y <= 142:print("我是清除按钮啊...")clear()elif 500.0 <= mouse_x <= 600.0 and 100.0 <= mouse_y <= 200.0:print("弹出框....")mg = g.enterbox('需要翻译的内容', title='翻译')  # 文本输入框text_surface = font.render(mg, True, (0, 0, 255))print(mg)  ## g.textbox(msg="内容", title="", text=mg)# 自动识别并把语言栏转换for ch in mg.encode('utf8'):if ch > 127:flag = Truelanguage()else:flag = Falselanguage()# 输入内容以后 需要把之前在这显示的内容清除renderText("  ", (500, 100))isFirst = Falsetranslate.text(mg)if __name__ == '__main__':start()

三、项目结构

说明:

test.py 是写的过程中的一个测试文件;

audio.mp3是语音播放时用到的,复制放在目录下就可用

四、演示效果

图标是找的图片,点击相应的图片处触发相应的功能。

如果您有更好的想法,请与我交流2959723401@Foxmail.com

代码下载:http://www.demodashi.com/demo/14326.html

注:本文著作权归作者,由demo大师发表,拒绝转载,转载需要作者授权

转载于:https://www.cnblogs.com/demodashi/p/10492756.html

基于Pygame写的翻译方法相关推荐

  1. 使用计算机翻译功能吗,基于翻译方法的计算机翻译工具比较

    江妍 摘要:随着中国在世界地位的不断提高,人们对于翻译的要求也日新月異,也因此出现了多种多样的计算机翻译工具供译者选择.首先介绍了计算机翻译工具的相关发展,而后描述了计算机翻译工具不同的翻译方法,并结 ...

  2. drf之day05: 2个视图基类,GenericAPIView的属性和方法,基于APIView写5个接口,基于GenericAPIView写5个接口,5个视图扩展类,9个视图子类,视图集

    目录标题 一:2个视图基类 1.GenericAPIView的属性和方法 二:基于APIView写5个接口 三:基于GenericAPIView写5个接口 四:五个视图扩展类 1..基于Generic ...

  3. 基于Pytorch的Transformer翻译模型前期数据处理方法

    基于Pytorch的Transformer翻译模型前期数据处理方法 Google于2017年6月在arxiv上发布了一篇非常经典的文章:Attention is all you need,提出了解决s ...

  4. python的pygame库使用方法_python基础教程使用Python第三方库pygame写个贪吃蛇小游戏...

    今天看到几个关于pygame模块的博客和视频,感觉非常有趣,这里照猫画虎写了一个贪吃蛇小游戏,目前还有待完善,但是基本游戏功能已经实现,下面是代码: # 导入模块 import pygame impo ...

  5. Java翻译byte数据,java学习|图说String(二):基于byte数组的String方法调用

    基于byte数组的String方法调用 上文说到,String的方法调用都是基于byte数组,其实说更详细点:都是基于String中value字段的调用: 注,本文中所有的源码均基于jdk11 通过上 ...

  6. python 播放mp3模块_Python基于pygame模块播放MP3的方法示例

    1 IDLE1 1 IDLE是python创初人Guido van Rossum使用python and Tkinter来创建的一个集成开发环境.要使用I 2018-04-14 为什么使用Python ...

  7. 用Python和Pygame写游戏-从入门到精通(1)

    From: http://eyehere.net/2011/python-pygame-novice-professional-1/ 博客刚开,打算做一个Pygame的系列,翻译自Will McGug ...

  8. 如何用Pygame写游戏(一)

    转载地址:http://eyehere.net/2011/python-pygame-novice-professional-1/ Pygame的历史  Pygame是一个利用SDL库的写就的游戏 ...

  9. Morph-UGATIT:一种支持渐进式域迁移的图像翻译方法

    本文为粉丝咆哮的阿杰投稿,介绍了其开发的Morph-UGATIT图像翻译库,欢迎大家使用这个有趣的开源工程. 链接:https://zhuanlan.zhihu.com/p/348124048 前言 ...

最新文章

  1. 共享变量类vb.net中的共享方法、共享变量、全局变量
  2. c语言 long和short区别,5分钟读懂Android 中的toast short 和long的区别
  3. volatile关键字解析~高级java必问
  4. c语言 方法重载 冲定义,C++ 重载(overload)、重写(overrride)、重定义(redefine)
  5. 一步步在Docker里运行Web应用
  6. java socket编程实现聊天程序_java Socket编程 聊天程序 服务器端和客户端
  7. 基于SOA的银行系统架构
  8. UITextView: 响应键盘的 return 事件(收回键盘)
  9. redis 缓存 key常量命名规则
  10. js的正则表达,只允许数字和特殊
  11. c语言山东科技大学答案oj,山东科技大学oj部分题目记答案.doc
  12. jenkins--master/slave模式---master是容器版---slave是非容器版
  13. Oracle Enterprise Linux 64-bit 下Oracle11g的监听配置改动及測试步骤
  14. c语言考试中操作题文件,计算机二级考试C语言操作题题库(21页)-原创力文档...
  15. 华为不提示连接计算机,求告知为什么现在华为用usb连电脑手机不显示
  16. Centos7/RedHat7安装NVIDIA显卡驱动
  17. 算法题的几种常见解题思路
  18. 浙大PAT 1034 Head of aGang
  19. proxmox ve 中文社区_Proxmox VE 部署维护
  20. 王道P41 T23(单链表实现)

热门文章

  1. 【linux】Valgrind工具集详解(十):SGCheck(检查栈和全局数组溢出)
  2. linux驱动:i2c驱动(二)
  3. Qt中文手册 之 QTableWidget
  4. 哲学家就餐问题c语言_哲学家就餐问题的一种Python解决方案
  5. c语言可视化_这些算法可视化网站助你轻松学算法
  6. tengine简单安装_Tengine介绍和安装
  7. java changelistener_ListChangeListener.Change
  8. 机器人瓦力船长机器人_警察“瓦力”来啦!机器人巡逻南京路 这样的它你喜欢吗?...
  9. php好的mvc中index方法,创建一个mvc应用目录架构并创建入口文件index.php
  10. 【java】兴唐第二十三节课作业