zoukankan      html  css  js  c++  java
  • Python + Tkinter 实现图形化机器翻译

    1、Tkinter 的定义

    Tkinter:Tkinter 模块(Tk 接口)是 Python 的标准 Tk GUI 工具包的接口 .Tk 和 Tkinter 可以在大多数的 Unix 平台下使用,同样可以应用在 Windows 和 Macintosh 系统里。Tk8.0 的后续版本可以实现本地窗口风格,并良好地运行在绝大多数平台中。

     

    2、Python 如何实现图形化机器翻译

    from tkinter import *
    from tkinter import messagebox
    import http.client
    import hashlib
    import json
    import urllib.parse
    import random
    
    
    # 创建窗口
    root = Tk()
    # 标题
    root.title('汉英译')
    # 窗口大小
    root.geometry('370x200')
    # 获取屏幕宽
    s_with = root.winfo_screenwidth()
    # 获取屏幕高度
    s_height = root.winfo_screenheight()
    
    # 计算页面打开在屏幕中央的位置
    l_x = str(round((s_with - 370) / 2))
    l_y = str(round((s_height - 100) / 2))
    root.geometry('+' + l_x + '+' + l_y)
    
    # add by 0730
    def setRadio1():
        root.title("汉译英")
        print(v.get())
    def setRadio2():
        root.title("英译汉")
        print(v.get())
    
    #可以通过传入特定参数直接和一个程序变量绑定, 这些参数包括: variable, textvariable, onvalue, offvalue, value.
    v = IntVar() #保存一个整型变量, 默认值为0
    radio1=Radiobutton(root,text="汉译英",variable=v,value=1,command=setRadio1)
    radio1.grid()
    # 输入控件
    entry = Entry(root, font=('微软雅黑', 15))
    # entry.grid(row=0, column=1)
    radio2=Radiobutton(root,text="英译汉",variable=v,value=2,command=setRadio2)
    radio2.grid()
    entry = Entry(root, font=('微软雅黑', 15))
    # entry.grid(row=0, column=2)
    # 第一列标签
    lable = Label(root, text='请输入内容:')
    # 定位布局 grid网格式布局 pack包 place位置
    lable.grid()
    # 输入控件
    entry = Entry(root, font=('微软雅黑', 15))
    entry.grid(row=2, column=1)
    res = StringVar() # 保存一个 string 类型变量, 默认值为""
    
    # 翻译结果标签
    lable1 = Label(root, text='翻译结果:')
    lable1.grid(row=3, column=0)
    # 翻译结果输入框
    entry1 = Entry(root, font=('微软雅黑', 15), textvariable=res)
    entry1.grid(row=3, column=1)
    def baidu_translate():
        #获取界面输入的内容
        content = entry.get().strip()
        # content = content.strip()
        # 判断输入翻译的内容是否为空
        if content == '':
            messagebox.showinfo('提示', '请输入翻译内容')
        else:
    
            appid = '20151113000005349'
            secretKey = 'osubCEzlGjzvw8qdQc41'
            # httpClient = None
            myurl = '/api/trans/vip/translate'
            q = content
            fromLang = 'zh'  # 源语言
            toLang = 'en'  # 翻译后的语言
            salt = random.randint(32768, 65536)
            sign = appid + q + str(salt) + secretKey
            sign = hashlib.md5(sign.encode()).hexdigest()#作为十六进制数据字符串值
            if(v.get()==1):
                myurl = myurl + '?appid=' + appid + '&q=' + urllib.parse.quote(
                    q) + '&from=' + fromLang + '&to=' + toLang + '&salt=' + str(
                    salt) + '&sign=' + sign
            else:
                myurl = myurl + '?appid=' + appid + '&q=' + urllib.parse.quote(
                    q) + '&from=' + toLang + '&to=' + fromLang + '&salt=' + str(
                    salt) + '&sign=' + sign
            try:
                httpClient = http.client.HTTPConnection('api.fanyi.baidu.com')
                httpClient.request('GET', myurl)
                response = httpClient.getresponse()# response是HTTPResponse对象
                jsonResponse = response.read().decode("utf-8")  # 获得返回的结果,结果为json格式
                js = json.loads(jsonResponse)  # 将json格式的结果转换字典结构
                print(js)
                dst = str(js["trans_result"][0]["dst"])  # 取得翻译后的文本结果
                print(dst)  # 打印结果
                # return dst
                res.set(dst)
            except Exception as e:
                print('err:' + str(e))
            finally:
                if httpClient:
                    httpClient.close()
    # 按钮
    button = Button(root, text='翻译', width='10', command=baidu_translate)
    # sticky 对齐方式 N S W E 上下左右
    button.grid(row=4, column=0, sticky=W)
    
    # 退出按钮 command是点击事件的方法
    exit_button = Button(root, text='退出', width='10', command=root.quit)
    exit_button.grid(row=4, column=1, sticky=E)
    
    # 显示窗口 消息循环 接收对窗口的所有操作的消息
    # 主事件循环
    root.mainloop()

    3、运行效果图展示

     

    欢迎关注【无量测试之道】公众号,回复【领取资源】
    Python编程学习资源干货、
    Python+Appium框架APP的UI自动化、
    Python+Selenium框架Web的UI自动化、
    Python+Unittest框架API自动化、
    资源和代码 免费送啦~
    文章下方有公众号二维码,可直接微信扫一扫关注即可。

    备注:我的个人公众号已正式开通,致力于测试技术的分享,包含:大数据测试、功能测试,测试开发,API接口自动化、测试运维、UI自动化测试等,微信搜索公众号:“无量测试之道”,或扫描下方二维码:

    添加关注,让我们一起共同成长!

  • 相关阅读:
    单位根反演学习笔记
    省选模拟测试17
    省选模拟测试16
    省选模拟测试15
    省选模拟测试14
    省选模拟测试13
    P4491 [HAOI2018]染色
    省选模拟测试12
    P4389 付公主的背包
    洛谷P3403
  • 原文地址:https://www.cnblogs.com/Wu13241454771/p/15157808.html
Copyright © 2011-2022 走看看