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

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