python 寫(xiě)一個(gè)桌面版的翻譯軟件

主要技術(shù):爬蟲(chóng)和tkinter模塊的運(yùn)用

思路說(shuō)明:設(shè)計(jì)一個(gè)圖形界面,第一行輸入中文,點(diǎn)擊 “翻譯” 按鈕,此時(shí)做的就是將輸入的內(nèi)容,通過(guò)有道網(wǎng)頁(yè)翻譯,發(fā)出POST請(qǐng)求,得到回應(yīng)后,將翻譯結(jié)果顯示在第二行,現(xiàn)象是 “結(jié)果” 行輸出翻譯結(jié)果;點(diǎn)擊 “退出” 按鈕就退出

先說(shuō)布局-------tkinter的運(yùn)用
最終實(shí)現(xiàn)圖片如下

image.png

直接上代碼

from tkinter import *

master = Tk()
#設(shè)置標(biāo)題
master.title('翻譯軟件')
#小x,非大X,設(shè)置大小
master.geometry('400x100+450+278')
#設(shè)置標(biāo)簽,排版(第一行第一列,即row=0,column=0)
Label(master,text="輸入任容:",font=('GB2312',18),fg='blue').grid(row=0,column=0)
Label(master,text="結(jié)果:",font=('GB2312',18),fg='blue').grid(row=1,column=0)
#設(shè)置文本框 對(duì)應(yīng)上邊lable的排版
Entry(master,font=('GB2312',18)).grid(row=0,column=1)
Entry(master,font=('GB2312',18)).grid(row=1,column=1)
#設(shè)置按鈕 按鈕增加響應(yīng)事件commnad=函數(shù)名,sticky設(shè)置對(duì)齊(參數(shù) 東起南北)
Button(master,text="翻譯",width=10,font=('GB2312',18)).grid(row=2,column=0,sticky=W)
Button(master,text="退出",width=10,font=('GB2312',18),command=master.quit).grid(row=2,column=1,sticky=E)
master.mainloop()

產(chǎn)生如下界面 點(diǎn)擊退出,就會(huì)推出

image.png

爬蟲(chóng)部分

import json
import requests

def fanyi():
    #url不是http://fanyi.youdao.com/translate_o?smartresult=dict&smartresult=rule,把_o去掉
    url = "http://fanyi.youdao.com/translate?smartresult=dict&smartresult=rule"
    data ={
        'i': '你好',
        'doctype': 'json'
    }
    #此處是POST請(qǐng)求
    r = requests.post(url,data=data)
    ret = r.content.decode()
    result = json.loads(ret)
    print(result)
fanyi()

輸出結(jié)果,可以看出返回結(jié)果在JSON里面

image.png

說(shuō)下思路,打開(kāi)有道翻譯網(wǎng)頁(yè)版,F(xiàn)12,查看Network,翻譯 "你好"
輸出 hello,在這里可以獲取url和請(qǐng)求方式POST,往下找到Form Date就是需要POST的數(shù)據(jù)結(jié)構(gòu),只需2個(gè),就可以了
image.png
image.png

整合兩部分
首先,輸出框里面是個(gè)變量,因?yàn)檩斎雰?nèi)容不定

res = StringVar()
entry2 = Entry(master,font=('GB2312',18),textvariable=res)
entry2.grid(row=1,column=1)

其次設(shè)置翻譯按鈕事件,關(guān)聯(lián)到自己寫(xiě)的fanyi函數(shù)

Button(master,text="翻譯",width=10,font=('GB2312',18),command=fanyi).grid(row=2,column=0,sticky=W)

最后就是翻譯函數(shù),首先獲取輸入內(nèi)容,然后在將爬取到的結(jié)果給變量
res(上面定義的)

def fanyi():
    #獲取輸入內(nèi)容,并去除空格
    content = entry1.get().strip()
    url = "http://fanyi.youdao.com/translate?smartresult=dict&smartresult=rule"
    #組合需要POST的data數(shù)據(jù),需要翻譯內(nèi)容為content變量
    data ={
        'i': content,
        'doctype': 'json'
    }
    #發(fā)送請(qǐng)求
    r = requests.post(url,data=data)
    ret = r.content.decode()
    result = json.loads(ret)
    print(result)
    #輸出結(jié)果為:{'type': 'ZH_CN2EN', 'errorCode': 0, 'elapsedTime': 0, 'translateResult': [[{'src': '你好', 'tgt': 'hello'}]]}
    #設(shè)置結(jié)果框res變量為需要的結(jié)果,不熟悉dict操作的,百度下
    #只需要hello
    res.set(result['translateResult'][0][0]['tgt'])

完整代碼

import json
from tkinter import *
import requests

def fanyi():
    content = entry1.get().strip()
    url = "http://fanyi.youdao.com/translate?smartresult=dict&smartresult=rule"
    data ={
        'i': content,
        'doctype': 'json'
    }
    r = requests.post(url,data=data)
    ret = r.content.decode()
    result = json.loads(ret)
    #print(result)
    res.set(result['translateResult'][0][0]['tgt'])
    #print(content)

master = Tk()
master.title('翻譯軟件')
#小x,非大X
master.geometry('400x100+450+278')
#設(shè)置標(biāo)簽
Label(master,text="輸入任容:",font=('GB2312',18),fg='blue').grid(row=0,column=0)
Label(master,text="結(jié)果:",font=('GB2312',18),fg='blue').grid(row=1,column=0)
#設(shè)置文本框
entry1 = Entry(master,font=('GB2312',18))
entry1.grid(row=0,column=1)

res = StringVar()
entry2 = Entry(master,font=('GB2312',18),textvariable=res)
entry2.grid(row=1,column=1)
#設(shè)置按鈕
Button(master,text="翻譯",width=10,font=('GB2312',18),command=fanyi).grid(row=2,column=0,sticky=W)
Button(master,text="退出",width=10,font=('GB2312',18),command=master.quit).grid(row=2,column=1,sticky=E)

master.mainloop()

運(yùn)行結(jié)果:


image.png

image.png

感謝閱讀~

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書(shū)系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容