1500字范文,内容丰富有趣,写作好帮手!
1500字范文 > python电子英汉词典显示_Python实现汉英字典

python电子英汉词典显示_Python实现汉英字典

时间:2019-08-05 20:35:58

相关推荐

python电子英汉词典显示_Python实现汉英字典

概述

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

详细

一、需求分析

使用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 inputstr

self.strtext = text

print("验证 输入的内容呀:" + self.strtext)

renderText(self.strtext, (500, 100))

inputstr = self.strtext

print("inputstr:" + inputstr)

4、翻译功能的实现

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

实现如下:def GetResult(self):

q = self.strtext # 获取输入的内容

# 判断用户是否输入了内容

if q == "":

print("请先输入内容")

self.content.append("")

else:

print("输入的语句:" + q)

url = 'http://api./api/trans/vip/translate'

salt = str(random.randint(32768, 65536))

sigin = self._appid + q + salt + self._key

print(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=' + sign

else:

myurl = url + '?q=' + urllib.parse.quote(q) +

'&from=' + str(self._from) + '&to=' + str(self._to)+

'&appid=' + str(self._appid) + '&salt=' + str(salt)+

'&sign=' + sign

response = 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 afterTransText

renderText(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 afterTransText

q = afterTransText.strip()

print("语音播放函数:")

print(q)

result = client.synthesis(q, 'zh', 4, {

'vol': 5

})

print(result)

# 识别正确返回语音二进制 错误则返回dict

if 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 = position

def render(self):

global btnx, btny, w, h

w, 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 flag

if not flag:

renderText("英文", (550, 50))

renderText("中文", (730, 50))

else:

renderText("中文", (550, 50))

renderText("英文", (730, 50))

# 源语言与目标语言转换按钮函数

def changeLan():

global flag

if flag:

flag = False

print(flag)

else:

flag = True

print(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 inputstr

self.strtext = text

print("验证 输入的内容呀:" + self.strtext)

renderText(self.strtext, (500, 100))

inputstr = self.strtext

print("inputstr:" + inputstr)

# 触发的翻译函数

def afterTrans(self):

self.GetResult()

self.afterTransText = " " # 执行一次清空一次

print("验证清空吗?:" + self.afterTransText)

for item in self.content:

self.afterTransText = self.afterTransText + item

print("我是翻译完要显示的字符串呀:" + self.afterTransText)

# 存储并显示 翻译完的 句子的函数(防止点击翻译,显示完内容后 被刷新冲掉)

def showTextAfterTrans(self):

global afterTransText

renderText(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./api/trans/vip/translate'

salt = str(random.randint(32768, 65536))

sigin = self._appid + q + salt + self._key

print(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=' + sign

else:

myurl = url + '?q=' + urllib.parse.quote(q) + '&from=' + str(self._from) + '&to=' + str(

self._to) + '&appid=' + str(self._appid) + '&salt=' + str(salt) + '&sign=' + sign

response = 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 afterTransText

q = afterTransText.strip()

print("语音播放函数:")

print(q)

result = client.synthesis(q, 'zh', 4, {

'vol': 5

})

print(result)

# 识别正确返回语音二进制 错误则返回dict

if not isinstance(result, dict):

with open('audio.mp3', 'wb') as f:

f.write(result)

f.close()

os.system('audio.mp3')

# 删除已输入内容函数

def clear():

global inputstr

inputstr = "点此输入需要翻译的内容"

# 创建translate的对象

translate = Translate()

def start():

global flag # 语言状态标志

isFirst = True

while 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 = True

language()

else:

flag = False

language()

# 输入内容以后 需要把之前在这显示的内容清除

renderText(" ", (500, 100))

isFirst = False

translate.text(mg)

if __name__ == '__main__':

start()

以上可实现简单的翻译,转载请联系授权。

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。