使用python制作一个GUi界面的翻译工具

371 阅读6分钟

一.python之Tkinter库学习:
Tkinter 是 Python 的标准 GUI 库。Python 使用 Tkinter 可以快速的创建 GUI 应用程序。
由于 Tkinter 是内置到 python 的安装包中、只要安装好Tkinter 之后就能 import Tkinter 库、而且 IDLE 也是用 Tkinter 编写而成、对于简单的图形界面 Tkinter 还是能应付自如。# 安装
sudo pip3 install tkinter
# 导入
import tkinter
窗口的几个常用属性
  • title: 设置窗口标题
  • geometry: 设置窗口大小
  • resizable():设置窗口是否可以变化长 宽;

Tkinter中控件的使用:
​ Button   按钮; Canvas   绘图形组件,可以在其中绘制图形; Checkbutton 复选框; Entry    文本框(单行); Text 文本框(多行); Frame   框架,将几个组件组成一组 Label    标签,可以显示文字或图片; Listbox    列表框; Menu    菜单; Menubutton 它的功能完全可以使用Menu替代; Message 与Label组件类似,但是可以根据自身大小将文本换行; Radiobutton 单选框; Scale    滑块;允许通过滑块来设置一数字值 Scrollbar 滚动条;配合使用canvas, entry, listbox, and text窗口部件的标准滚动条; Toplevel 用来创建子窗口窗口组件。(在Tkinter中窗口部件类没有分级;所有的窗口部件类在树中都是兄弟。)
tkinter.Entry中的控制参数
​ background(bg)    文本框背景色; foreground(fg) 前景色;·1 selectbackground   选定文本背景色; selectforeground   选定文本前景色; borderwidth(bd)   文本框边框宽度; font  字体; show    文本框显示的字符,若为*,表示文本框为密码框; state    状态; width      文本框宽度 textvariable    可变文本,与StringVar(StringVar是Tk库内部定义的字符串变量类型 )等配合着用
[Python]
纯文本查看
复制代码
01
02
03
04
05
06
07
08
09
10
11
12
13
# tkinter.Entry
import tkinter as tk
root = tk.Tk() # 初始化Tk()
root.title("entry-test") # 设置窗口标题
root.geometry("300x200") # 设置窗口大小 注意:是x 不是*
root.resizable(width=True, height=False) # 设置窗口是否可以变化长/宽,False不可变,True可变,默认为True
var = tk.StringVar()
e = tk.Entry(root, textvariable=var)
var.set("entry") # 设置文本框中的值
e.pack(side=tk.BOTTOM) # 这里的side可以赋值为LEFT--左 TOP--上 BOTTOM--下 RIGHT--右
root.mainloop() # 显示窗口()

标签tkinter.Label组件控制参数
​ Anchor     标签中文本的位置; background(bg)    背景色; foreground(fg)   前景色; borderwidth(bd)   边框宽度; width      标签宽度; height     标签高度; bitmap     标签中的位图; font    字体; image      标签中的图片; justify     多行文本的对齐方式; text        标签中的文本,可以使用'\n'表示换行 textvariable     显示文本自动更新,与StringVar等配合着用
[Python]
纯文本查看
复制代码
1
2
3
4
5
6
7
8
9
# tkinter.Label
import tkinter as tk
root = tk.Tk() # 初始化Tk()
root.title("label-test") # 设置窗口标题
root.geometry("200x300") # 设置窗口大小 注意:是x 不是*
root.resizable(width=True, height=False) # 设置窗口是否可以变化长/宽,False不可变,True可变,默认为True
l = tk.Label(root, text="label", bg="blue", font=("Arial", 12), width=8, height=3)
l.pack(side=tk.BOTTOM) # 这里的side可以赋值为LEFT--左 TOP--上 BOTTOM--下 RIGHT--右
root.mainloop()

Python Tkinter Grid布局管理器详解
Grid(网格)布局管理器会将控件放置到一个二维的表格里。主控件被分割成一系列的行和列,表格中的每个单元(cell)都可以放置一个控件。
注意:不要试图在一个主窗口中混合使用pack和grid
[Python]
纯文本查看
复制代码
1
2
3
4
5
6
7
8
9
from tkinter import *
tk=Tk()
#标签控件,显示文本和位图,展示在第一行
Label(tk,text="First").grid(row=0,column=1)
Label(tk,text="Second").grid(row=1,column=1)#第二行
#主事件循环
mainloop()



Python:GUI之tkinter事件绑定
  • command
  • bind
  • protocol

bind的用法:控件.bind(event, handler),其中event是tkinter已经定义好的的事件,handler是处理器,可以是一个处理函数,如果相关事件发生, handler 函数会被触发, 事件对象 event 会传递给 handler 函数
  • 常见event有:
    鼠标单击事件:鼠标左键点击为 <Button-1>, 鼠标中键点击为 <Button-2>, 鼠标右键点击为 <Button-3>, 向上滚动滑轮为 <Button-4>, 向下滚动滑轮为 <Button-5>.
    鼠标双击事件.:鼠标左键点击为 <Double-Button-1>, 鼠标中键点击为 <Double-Button-2>, 鼠标右键点击为 <Double-Button-3>.
    件:鼠标左键点击为 <ButtonRelease-1>, 鼠标中键点击为 <ButtonRelease-2>, 鼠标右键点击为 <ButtonRelease-3>. 鼠标相对当前控件的位置会被存储在 event 对象中的 x 和 y 字段中传递给回调函数.
    鼠标移入控件事件:<Enter>
    获得焦点事件:<FocusIn>
    鼠标移出控件事件: <Leave>
    失去焦点事件:<FocusOut>
    鼠标按下移动事件:鼠标左键点击为 <B1-Motion>, 鼠标中键点击为 <B2-Motion>, 鼠标右键点击为 <B3-Motion>. 鼠标相对当前控件的位置会被存储在 event 对象中的 x 和 y 字段中传递给回调函数.
    键盘按下事件:<Key>,event中的keysym ,keycode,char都可以获取按下的键【其他想要获取值的也可以先看看event中有什么】
    键位绑定事件:<Return>回车键,<BackSpace>,<Escape>,<Left>,<Up>,<Right>,<Down>…….
    控件大小改变事件:<Configure>,新的控件大小会存储在 event 对象中的 width 和 height 属性传递. 有些平台上该事件也可能代表控件位置改变.


二.python之requests库学习:
requests是python实现的简单易用的HTTP库,使用起来比urllib简洁很多。
[Python]
纯文本查看
复制代码
1
2
# 安装
pip3 install requests



各种请求方式
[Python]
纯文本查看
复制代码
1
2
3
4
5
6
7
8
import requests
requests.get('http://httpbin.org/get')
requests.post('http://httpbin.org/post')
requests.put('http://httpbin.org/put')
requests.delete('http://httpbin.org/delete')
requests.head('http://httpbin.org/get')
requests.options('http://httpbin.org/get')



返回信息的打印
[Python]
纯文本查看
复制代码
1
2
3
4
5
6
7
8
9
import requests
response = requests.get('http://www.baidu.com')
print(response.status_code) # 打印状态码
print(response.url) # 打印请求url
print(response.headers) # 打印头信息
print(response.cookies) # 打印cookie信息
print(response.text) #以文本形式打印网页源码
print(response.content) #以字节流形式打印


在这个里面我们需要调用有道翻译的翻译接口,分析接口类型,我们需要用的是post请求:

[Python]
纯文本查看
复制代码
01
02
03
04
05
06
07
08
09
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
url = "http://fanyi.youdao.com/translate?smartresult=dict&smartresult=rule&smartresult=ugc&sessionFrom=null"
headers = {
"Host": " fanyi.youdao.com",
'Connection': 'keep - alive',
'Accept': ' application / json, text / javascript, * / *; q = 0.01',
'Origin': ' http: // fanyi.youdao.com',
'X - Requested - With': ' XMLHttpRequest',
'User - Agent': ' Mozilla / 5.0(WindowsNT10.0;WOW64) AppleWebKit / 537.36(KHTML, likeGecko) Chrome / 55.0.2883.87Safari / 537.36',
'Content - Type': ' application / x - www - form - urlencoded;charset = UTF - 8',
'Referer': ' http: // fanyi.youdao.com /',
'Accept - Encoding': 'gzip, deflate',
'Accept - Language': 'zh - CN, zh;q = 0.8'
}
formData = {
"type": "AUTO",
"i":word,
"from":"AUTO",
'to':'AUTO',
"smartresult":"dict",
"client":"fanyideskweb",
'salt':'1525516901332',
'sign':'a2616a82b1e43da512ed61c8dc09ec2c',
"doctype":"json",
"version":"2.1",
"keyfrom":"fanyi.web",
"action":"FY_BY_REALTIME",
"typoResult":"true"
}
response = requests.post(url=url, headers=headers, data=formData)
# print(response.text)
data = json.loads(response.text)['translateResult'][0][0]['tgt']


项目展示图:









snipaste20180821_155724.jpg

(17.14 KB, 下载次数: 1)

snipaste20180821_155724.jpg

更多免费技术资料可关注:annalin1203