zoukankan      html  css  js  c++  java
  • python GUI图形界面tkinter:实现有道翻译小案例

    # 实现模拟有道翻译
    # coding:utf-8
    from tkinter import *
    import requests
    
    # 有道翻译
    class YouDao:
        def __init__(self):
            pass
    
        def fanyi(self, content):
            # translate_o改成translate,可防止返回:{'errorCode': 50}
            # url = 'http://fanyi.youdao.com/translate_o?smartresult=dict&smartresult=rule'
            url = 'http://fanyi.youdao.com/translate?smartresult=dict&smartresult=rule'
            headers = {
                'referer': 'http://fanyi.youdao.com/',
                'user-agent': 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_3) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/78.0.3904.108 Safari/537.36 OPR/65.0.3467.78 (Edition Baidu)'
            }
            data = {
                'i': content,
                'from': 'AUTO',
                'to': 'AUTO',
                'smartresult': 'dict',
                'client': 'fanyideskweb',
                'salt': '15791434983359',
                'sign': '4c3ba7ac1aefe25a7e0f6780c3f08512',
                'ts': '1579143498335',
                'bv': '120ea3adb00787750fbc44dd1af54b88',
                'doctype': 'json',
                'version': '2.1',
                'keyfrom': 'fanyi.web',
                'action': 'FY_BY_REALTlME',
            }
            res = requests.post(url, headers=headers, data=data)
            if res.status_code == 200:
                result = res.json()
                if 'translateResult' in result:
                    return result['translateResult'][0][0]['tgt']
                else:
                    return result
            else:
                return '请求失败'
    
    # 界面
    class Application:
        def __init__(self):
            self.youdao = YouDao()
    
            # 创建窗口对象
            self.window = Tk()
    
            # 窗口对象的标题
            self.window.title(u'我的程序')
    
            # 设置窗口的大小和位置(宽:310,高:370,坐标:500,300)
            self.window.geometry("310x370+500+300")
            self.window.minsize(310,370)
            self.window.maxsize(310,370)
    
            # 创建一个文本框
            # self.text1 = Text(self.window, background='azure')
            self.text1 = Text(self.window, background='#ccc', foreground='black')
            self.text1.place(x=10, y=5, width=290, height=165) # 设置位置坐标和大小
            self.text1.bind('<Key-Return>', self.text1_event) # 绑定键盘回车键事件
    
            # 创建提示标题
            self.label1 = Label(self.window, text=u'翻译结果:')
            self.label1.place(x=10, y=175)
    
            # 创建按钮
            self.btn1 = Button(self.window, text='翻译', command=self.btn1_event)
            self.btn1.place(x=220, y=175, width=35, height=25)
            self.btn2 = Button(self.window, text='清空', command=self.btn2_event)
            self.btn2.place(x=263, y=175, width=35, height=25)
    
            # 创建结果文本框
            self.text2 = Text(self.window, background='black', foreground='white')
            self.text2.place(x=10, y=205, width=290, height=165)
    
        # text1 监听回车事件
        def text1_event(self, event):
            # 获取用户输入的值
            content = self.text1.get(0.0, END).strip().replace('
    ', ' ')
            print(content)
            # 进行翻译
            result = self.youdao.fanyi(content)
            # 填写结果到结果输入框
            self.text2.delete(0.0, END)
            self.text2.insert(END, result)
    
        # btn1 翻译事件
        def btn1_event(self):
            # 获取用户输入的值
            content = self.text1.get(0.0, END).strip().replace('
    ', ' ')
            print(content)
    
            # 进行翻译
            result = self.youdao.fanyi(content)
    
            # 填写结果到结果输入框
            self.text2.delete(0.0, END)
            self.text2.insert(END, result)
    
        # btn2 清空事件
        def btn2_event(self):
            # 清空文本框的内容
            self.text1.delete(0.0, END)
            self.text2.delete(0.0, END)
    
        def run(self):
            # 进入循环
            self.window.mainloop()
    
    if __name__ == '__main__':
        app = Application()
        app.run()

    运行结果:

    遇到的问题:

    1、解决有道翻译返回 {'errorCode': 50}的问题:

    1)更改请求 url,把translate_o修改成translate

      参考:https://blog.csdn.net/qq_36697196/article/details/90696845

    2)参考:https://blog.csdn.net/suixinlun/article/details/93976400

    2、tkinter的基本操作:

       https://www.runoob.com/python/python-gui-tkinter.html

       https://www.cnblogs.com/happy-xiaoxiao/p/10494508.html

    3.图形界面打包

    1)使用pyinstaller来进行打包,工具安装命令:

    pip install pyinstaller

    2)打包命令:(只需编译入口文件即可,即:pyinstaller 选项 Python 源文件)

    pyinstaller -F -w main.py

    参考:https://www.jianshu.com/p/924a130a3d7e 

  • 相关阅读:
    LeetCode-6 ZigZag Conversion
    求两个字符串的最长公共子串
    Eclipse 添加 javap
    时间复杂度
    leetcode oj-3
    Android Rom分区 与 SD卡读写
    论文首次处理流程及代码
    论文片段
    项目整体流程
    春晚项目中的相关脚本
  • 原文地址:https://www.cnblogs.com/KeenLeung/p/12204358.html
Copyright © 2011-2022 走看看