Tkinter+requests庫打造屬於你自己的翻譯軟件(二)

上一篇文章我們介紹瞭如何與百度 API 交互進行翻譯,現在我們利用這個簡單的爬蟲再寫出一個圖形界面。

先來看一個效果圖:

首先我們先要新建一個窗口,然後自動獲取屏幕寬度和高度,在屏幕中央顯示一個窗口

import tkinter as tk
window=tk.Tk()
ws=window.winfo_screenwidth()#獲取屏幕寬度
hs=window.winfo_screenheight()#獲取屏幕高度
x=(ws/2)-200#窗口中心點的橫座標
y=(hs/2)-200#窗口中心點的縱座標
winWideth=450#根窗口寬度
winHeight=320#根窗口高度
window.geometry("%dx%d+%d+%d"%(winWideth, winHeight,x,y))#居中顯示窗口
window.resizable(width=False, height=False)#禁止拉伸窗口
window.title('簡單翻譯by臧貴城')#設置容器標題
window.iconbitmap("F:\work\python_file\BaiduTranlater\myico.ico")

window.mainloop()#窗口啓動命令

效果圖:
這裏寫圖片描述

之後我們新建上下兩個文本框

textHeight = 10#文本框高度,注意不是像素高度而是字符高度,也就是一列有幾個字符
textWidth = 30#文本框寬度,這裏是字符寬度也就是一行能有幾個字符
textUp=tk.Text(window, height=textHeight, width=textWidth)#設置文本框
textUp.grid(row=1, column=0, sticky=tk.N+tk.S)#設置爲上下對齊,這裏利用了東西南北進行上下左右的代替,放置位置1,0
textDown=tk.Text(window, height=textHeight, width=textWidth)#設置文本框
textDown.grid(row=3, column=0, sticky=tk.N+tk.S)# grid 爲佈局管理器,將窗體分爲格子狀,用 row 和column 代表橫縱座標,放置位置3,0

效果圖:
這裏寫圖片描述
之後我們添加兩個滑動條,當文本框內容滿了以後可以通過上下滑動來瀏覽內容

upScrollba=tk.Scrollbar(window)#設置上文本框滾動條
upScrollba.grid(row=1, column=1, sticky=tk.N+tk.S)#放置位置爲1,1
upScrollba.config(command=textUp.yview)#綁定滾動事件
textUp.config(yscrollcommand=upScrollba.set)#設置滾動事件動作

downScrollba=tk.Scrollbar(window)#設置下文本框滾動條
downScrollba.grid(row=3, column=1, sticky=tk.N+tk.S)#放置位置爲3,1
downScrollba.config(command=textDown.yview)
textDown.config(yscrollcommand=downScrollba.set)

效果圖:
這裏寫圖片描述
現在我們開始添加按鈕

cleanButton=tk.Button(window, text="清空文本框", command = None)#清空上方的輸入框
cleanButton.grid(row=1, column=3, sticky=tk.W+tk.E)
translateButton=tk.Button(window, text="點此進行翻譯", command=None)#進行翻譯
translateButton.grid(row=2, column=3, sticky=tk.W+tk.E)
copyButton=tk.Button(window, text="複製結果", command = None)#複製下方結果框內容
copyButton.grid(row=3, column=3, sticky=tk.W+tk.E)

這裏我們新建了三個按鈕,暫時先將 command 參數設爲 None ,效果如圖:
這裏寫圖片描述
到現在爲止大部分佈局已經結束了,接下來就是實現不同功能了

第一個功能是清空文本框:

def clearText():
    textUp.delete(1.0,tk.END)#很簡單,就是將 text 控件從 1.0 這個位置到結束爲止全部的內容刪除

第二個內容是翻譯,這裏涉及到幾個問題,第一個獲得文本內容,第二個是結合前一篇文章,將獲取內容傳入百度爬蟲中,第三步是將百度爬蟲返回值顯示在文本框中

def translate():
    data = str(textUp.get("0.0", "end"))#通過 get 方法可以獲得文本框內容,其中 0.0 爲起始複製位, end 爲複製結束位
    if data == '' or None:#若待翻譯框爲空
        textDown.delete(1.0,tk.END)#清除結果文本框
        result = '調皮,快點輸入內容啦'
        textDown.insert("1.0", result)#在結果框中從 1.0 的位置開始插入 result 字符串,也就是在文本框中顯示內容
    else:
        textDown.delete(1.0,tk.END)
        data = data.replace('\n', ',')[:-1]#對文本框獲取的內容進行處理,去掉換行符 '\n'
        temp=baiduapi()#初始百度翻譯爬蟲
        result=temp.translate(data)#傳入待翻譯內容並獲得返回值
        textDown.insert("1.0", result)#將返回值傳入結果框

最後一個功能就是複製翻譯結果

import pyperclip#一個輕量級第三方庫,針對剪貼板進行讀寫
import tkinter.messagebox as tkmsg#導入消息庫
def copyResult():  
    pyperclip.copy(str(textDown.get("0.0", "end")))#將翻譯結果寫入剪貼板
    tkmsg.showinfo('提示','複製成功')#使用 tkinter自帶的 masgbox 顯示覆製成功

到此爲止所有主要功能均已經實現,接下來是將這些功能綁定到 Button 上,修改之前的 Button 代碼

cleanButton=tk.Button(window, text="清空文本框", command = clearText)#清空上方的輸入框
cleanButton.grid(row=1, column=3, sticky=tk.W+tk.E)
translateButton=tk.Button(window, text="點此進行翻譯", command=translate)#進行翻譯
translateButton.grid(row=2, column=3, sticky=tk.W+tk.E)
copyButton=tk.Button(window, text="複製結果", command = copyResult)#複製下方結果框內容
copyButton.grid(row=3, column=3, sticky=tk.W+tk.E)

效果圖:
這裏寫圖片描述

到這裏基本的功能已經都實現了,接下來是一些進階內容,主要是

  1. 動態顯示當前時間
  2. 測試網絡是否通暢
  3. 將上面兩個功能放入不同線程防止出現干擾

如有興趣或是需要更加詳細的指導請聯繫QQ:
723831904

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章