tkinter messagebox 位置_tkinter首战——lures教你自制在线翻译软件

306b5b5244d01c6716d836bbcc21f38d.png

lures上午是在上德语!下午在3点开始无聊,就利用刚学的tkinter知识自己做了一款在线翻译的软件!

说干就干,花了接近2小时,终于完成了,熟练的在cmd窗口使用pyinstaller进行封装,于是第一版在线翻译软件制作完成!

正好今天没啥话题可写,那朕就写写这个吧!

先来看一下软件运行的情况:

f4c7bc1275a8dcd7dcdf763fc54a64f1.png

开发环境

abcb7cb3eaa054e1c7656b60793936c0.png

lures使用的开发环境是:

        Pycharm2019

        Python3.7.0

环境的安装,可以在lures的微信公众后台【软件目录】【windows软件】进行查看,寻找你想要安装的软件版本!

安装后,你需要干的事情是:

        ①pip升级:

python -m pip install --upgrade pip

            ②pip换成国内镜像:

    https://blog.csdn.net/sinat_21591675/article/details/82770360

            ③pycharm【设置】里面设置Python编译环境

                操作方法和下面的类似!

https://blog.csdn.net/observador/article/details/84146985

            ④【cmd】或者是pycharm的Terminal终端输入: 

pip install pyinstallerpip install requests

Ok!如果你按照lures的操作完成了以上环境的配置!

那么,lures就开始开车了……

tkinter图形化界面

abcb7cb3eaa054e1c7656b60793936c0.png

tkinter是Python中最为简单的一种GUI图形化界面,在Python中一共是13个这样的GUI库,其中包括pyQt、wxpython……

下面,我们就来完成第一部分的内容——完成界面设计!

from tkinter import *window = Tk()# 窗口的大小,前两个参数是:宽、高,后面的参数是坐标window.geometry('335x100+800+400')# 禁止窗口的拉伸window.resizable(0, 0)# 窗口的标题window.title("中英互译器")# 控件label = Label(window, text="请输入要翻译的文字:", font=("仿宋", 12))# 位置,网格式的布局label.grid(row=0, column=0, sticky='e')# 输入框entry = Entry(window, font=("仿宋", 12))# row和column的作用:该表label控件的位置entry.grid(row=0, column=1)label1 = Label(window, text="翻译之后得到的文字:", font=("仿宋", 12))# sticky是实现对齐方式的label1.grid(row=1, column=0, sticky='e')entry1 = Entry(window, font=("仿宋", 12))entry1.grid(row=1, column=1)# 空出一行,使布局漂亮些label2 = Label(window, text="")label2.grid(row=2, column=0)# 按钮# command = translation完成事件的绑定button = Button(window, text="翻译", width="10")button.grid(row=3, column=0, sticky='w')# command = window.quit是用来退出界面的!button1 = Button(window, text="退出", width="10", command=window.quit)button1.grid(row=3, column=1, sticky='e')# 显示窗口(消息循环)window.mainloop()

其中,lures注释的很详细!

这边布局的方式,tkinter有3种:pack、grid和place

其中呢,常见的是pack和grid!

代码写成那样,运行的框架就是跟我们最终见到的是一样:

8bea60b696f6e4135afcd415e2792b05.png

但是呢?俺们点击是莫得效果滴!

因为除了最后的【退出】按钮,俺们绑定了command = window.quit外,翻译按钮并没有加入事件的绑定!

所以,下面涉及到我们最关键的:爬虫

有道翻译的爬取

abcb7cb3eaa054e1c7656b60793936c0.png

不知道小伙伴们用的常见的翻译软件是哪些?

lures自己呢?习惯是有道翻译、Google翻译、百度翻译

所以这次数据的爬取就用有道翻译来了!

Of course,也可以换成百度翻译和Google翻译!

import requestsdef translation(content):    # 去除多余的空格,用于判断用户手输入了信息!    con = content.strip()    if con != '':        url = 'http://fanyi.youdao.com/translate?smartresult=dict&smartresult=rule'        headers = {            'Cookie': 'OUTFOX_SEARCH_USER_ID=1972418272@10.108.160.105; JSESSIONID=aaaXYvTD-n_jObqhJjGex; OUTFOX_SEARCH_USER_ID_NCOO=846912277.6744791; ___rl__test__cookies=1585383917099',            'Host': 'fanyi.youdao.com',            'Origin': 'http://fanyi.youdao.com',            'Referer': 'http://fanyi.youdao.com/',            'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/78.0.3904.108 Safari/537.36'        }        data = {            'i': con,            'from': 'AUTO',            'to': 'AUTO',            'smartresult': 'dict',            'client': 'fanyideskweb',            'doctype': 'json',            'version': '2.1',            'keyfrom': 'fanyi.web',            'action': 'FY_BY_REALTlME'        }        response = requests.post(url=url,headers=headers,data=data)        response.encoding = response.apparent_encoding        res = response.json()['translateResult'][0][0]['tgt']        print(res)if __name__ == "__main__":    content = input("请输入翻译内容:")    translation(content)

这样呢,用户输入想要翻译的内容,就可以实现翻译成对应的文字了(中文和英文)。

但是要注意一点问题:

        ①有道翻译的网址原本不是代码中所展现的,但是这个是有道最原始的url,现在的url估计是担心别人爬的多,所以就加了一些不必要的参数!

        ②参数都是时间戳的形式,所以需要js解密!这太难了!所以就取巧用了这个原始的url!

下面我们就将这个函数绑定到另一个按钮【翻译】上!

完整代码!

abcb7cb3eaa054e1c7656b60793936c0.png
from tkinter import *from tkinter import messageboximport requests"""搭建界面"""def translation():    """完成翻译的功能"""    """        1、获取用户的输入        2、通过爬取【百度翻译、谷歌翻译或者有道翻译】翻译结果        3、根据获取的结果,显示到窗口上    """    # 获取用户输入的结果    content = entry.get()    # 去除多余的空格,用于判断用户手输入了信息!    con = content.strip()    if con == "":        messagebox.showinfo('提示', '请输入要翻译的内容!')    else:        url = 'http://fanyi.youdao.com/translate?smartresult=dict&smartresult=rule'        headers = {            'Cookie': 'OUTFOX_SEARCH_USER_ID=1972418272@10.108.160.105; JSESSIONID=aaaXYvTD-n_jObqhJjGex; OUTFOX_SEARCH_USER_ID_NCOO=846912277.6744791; ___rl__test__cookies=1585383917099',            'Host': 'fanyi.youdao.com',            'Origin': 'http://fanyi.youdao.com',            'Referer': 'http://fanyi.youdao.com/',            'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/78.0.3904.108 Safari/537.36'        }        """            注意:url网址本来是"http://fanyi.youdao.com/translate_o?smartresult=dict&smartresult=rule"                 但是在data中存在的几个参数涉及到js解密,时间戳的问题                 所以这里一个取巧的方式就是把网址中的_o去掉(虽然不知道原因)        """        data = {            'i': con,            'from': 'AUTO',            'to': 'AUTO',            'smartresult': 'dict',            'client': 'fanyideskweb',            'doctype': 'json',            'version': '2.1',            'keyfrom': 'fanyi.web',            'action': 'FY_BY_REALTlME'        }        response = requests.post(url=url,headers=headers,data=data)        response.encoding = response.apparent_encoding        res = response.json()['translateResult'][0][0]['tgt']        # 将结果显示到窗口上        result.set(res)        return res# 创建窗口window = Tk()# 窗口的大小,前两个参数是:宽、高,后面的参数是坐标window.geometry('335x100+800+400')# 禁止窗口的拉伸window.resizable(0, 0)# 窗口的标题window.title("中英互译器")# 控件label = Label(window, text="请输入要翻译的文字:", font=("仿宋", 12))# 位置,网格式的布局label.grid(row=0, column=0, sticky='e')# 输入框entry = Entry(window, font=("仿宋", 12))# row和column的作用:该表label控件的位置entry.grid(row=0, column=1)label1 = Label(window, text="翻译之后得到的文字:", font=("仿宋", 12))# sticky是实现对齐方式的label1.grid(row=1, column=0, sticky='e')# 随时变化的量result = StringVar()entry1 = Entry(window, font=("仿宋", 12),textvariable=result)entry1.grid(row=1, column=1)# 空出一行,使布局漂亮些label2 = Label(window, text="")label2.grid(row=2, column=0)# 按钮# command = translation完成事件的绑定button = Button(window, text="翻译", width="10", command=translation)button.grid(row=3, column=0, sticky='w')# command = window.quit是用来退出界面的!button1 = Button(window, text="退出", width="10", command=window.quit)button1.grid(row=3, column=1, sticky='e')# 显示窗口(消息循环)window.mainloop()

注意的是:

    ①因为翻译是:实时变化的,所以我们需要设置一个随时变化的量:result = StringVar()

    ②在后面的文本框内:得到爬取后的翻译结果!

entry1 = Entry(window, font=("仿宋", 12),textvariable=result)

 result.set(res) return res

封装软件!

abcb7cb3eaa054e1c7656b60793936c0.png

打开【cmd】窗口,切换到我们的代码目录!

e4b57cdb4f6931d14126be196c847635.png

大家可以下载自己想要的logo图标作为软件的logo!

这里我就下载了Google翻译的logo!

3ba8269367126f82b05333f806b455ad.png

我们就可以在【cmd】中输入下面的命令:

pyinstaller -F -w -i"logo.ico" demo.py

可以查看命令的执行结果:

0089ac67fa0317b561757ef477cdc67a.png

我们可以看到已经封装完成!其中软件就在【dist】目录下!

c057be85edf39a882f0fdacc24e5c8c9.png

f63932bfd613044f87bcb61b82a46a4e.png

将这个剪切到上一级目录中!其余的可以删掉了!

8b19815353d05c5d29ba73f954d6c4fe.png

这样,软件就可以直接使用啦~~

小结

abcb7cb3eaa054e1c7656b60793936c0.png

lures无聊时做出来的事!代码不精之处勿怪!

软件及代码只供学习交流和娱乐!拒绝商用!!!

觉得有帮助的朋友们别忘了打卡~~~

6938604807c957479254aff57eeb4ea5.png

原创不易

点亮在看,拜谢!

e351b117957693e35ceed7bddaf6bab2.png

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值