Tkinter 制作的一个画图和翻译软件
参考了挺多博客,在此就不一一列举了。
from matplotlib import pyplot as plt
import tkinter
import numpy as np
from matplotlib.backends.backend_tkagg import FigureCanvasTkAgg, NavigationToolbar2Tk
from matplotlib.backend_bases import key_press_handler
from matplotlib.figure import Figure
import json
from tkinter import *
import requests
#
#【1】tkinter
#【1.1】创建tkinter的主窗口
root = tkinter.Tk()
#【1.2】tkinter窗口名
root.title("tk窗口(翻译以及画图)")
#【1.3】设置tkinter窗口名大小
root.geometry('700x500') # 这里的乘是小x
#
#【1.7.1】翻译按钮出发的函数
def fanyi():
content = entry1.get().strip() # 把翻框里需要翻译的内容get过来
url = "http://fanyi.youdao.com/translate?smartresult=dict&smartresult=rule"
data = { # data是截图里的from data里的内容
'i': content,
'doctype': 'json'
}
r = requests.post(url, data=data) # requests的post,和get的主要区别,个人觉得是post可以用来提交一些数据,看附录部分解释
ret = r.content.decode()
result = json.loads(ret)
# print(result)
res.set(result['translateResult'][0][0]['tgt'])
# print(content)
#【1.4】设置标签
Label(root, text="输入任容:", font=('GB2312', 18), fg='blue').grid(row=1, column=0)
Label(root, text="结果:", font=('GB2312', 18), fg='blue').grid(row=2, column=0)
#【1.5】设置文本框
entry1=Text(root, width=20,height=3,font=('GB2312', 18))
#entry1 = Entry(root, font=('GB2312', 18))
entry1.grid(row=1, column=1)
#【1.6】
res = StringVar()
entry2=Text(root, width=20,height=3,font=('GB2312', 18))
#entry2 = Entry(root, font=('GB2312', 18), textvariable=res)
entry2.grid(row=2, column=1)
#【1.7】 设置按钮
Button(root, text="翻译", width=10, font=('GB2312', 18), command=fanyi).grid(row=4, column=0, sticky=W)
Button(root, text="退出", width=10, font=('GB2312', 18), command=root.quit).grid(row=4, column=1, sticky=E)
#
# 生成用于绘sin图的数据,这个接口可以用于以后实时数据的输入
#【2】matplot部分
#【2.1】matplot部分,创建一个figure
f=plt.figure(figsize=(4, 3))
#【2.2】把figure分为三行一列
a = plt.subplot(3, 1, 1)
b = plt.subplot(3, 1, 2)
c = plt.subplot(3, 1, 3)
#【2.3】为第一行窗口创建名字
c.set_title("c title")
#【2.4】创建变量,xy
x = np.arange(0, 50, 0.01)
y = np.sin(2 * np.pi * x)
# #【2.5】matplot部分,打印第一行的窗口显示内容
a.plot(x,y,'-r')
#
#【3】matplot画折线段动图部分,这部分留做本地数据的读入
#开启interactive mode 成功的关键函数
plt.ion()
#【3.1】读取本地文件的名字
filename = 'a.txt'
step, dis, gan = [], [], []
with open(filename, 'r') as line:
# 【3.2】按行读取
lines = line.readlines()
# j用于判断读了多少条
j = 0
for line in lines:
#plt.clf() #清空画布上的所有内容
#【3.3】分割txt文档里的内容
temp = line.split('loss ')
t = temp[1].split(',')
step.append(j)
j = j + 1
#【3.4】把dis和gan作为x和y轴
dis.append(float(t[0]))
gan.append(float(temp[2]))
#【3.5】matplot显示在第二行
b.plot(dis,gan,'-r')
#【3.6】把这个图显示在matplot部分的第二行
plt.pause(0.1)
plt.show() # 展示
#【1.8】tkinter部分的窗口显示,这部分应该就是用于把a和b两个窗口显示到tk的ui界面窗口上去。
#将绘制的图形显示到tkinter---创建属于root的canvas画布,并将图f置于画布上
canvas = FigureCanvasTkAgg(f, master=root)
canvas.draw() # 注意show方法已经过时了,这里改用draw
#【1.9】下面两种布局方式二选一
canvas.get_tk_widget().grid(row=5, column=0)
# canvas.get_tk_widget().pack(side=tkinter.TOP, # 上对齐
# fill=tkinter.BOTH, # 填充方式
# expand=tkinter.YES) # 随窗口大小调整而调整
# 主循环
#【1.10】tkinte
#
from matplotlib import pyplot as plt
import tkinter
import numpy as np
from matplotlib.backends.backend_tkagg import FigureCanvasTkAgg, NavigationToolbar2Tk
from matplotlib.backend_bases import key_press_handler
from matplotlib.figure import Figure
#【1】tkinter
#【1.1】创建tkinter的主窗口
root = tkinter.Tk()
#【1.2】tkinter窗口名
root.title("tk窗口(翻译以及画图)")
#【1.3】设置tkinter窗口名大小
f = Figure(figsize=(10, 5), dpi=100)
#【1.4】把tkinter窗口划分为两行一列,第一个为a第二个为b
a = f.add_subplot(211) # 添加子图:1行1列第1个
b = f.add_subplot(212) # 添加子图:1行1列第1个
# 生成用于绘sin图的数据
#【2】matplot部分
#【2.1】matplot部分,创建一个figure
plt.figure(figsize=(6, 5))
#【2.2】把figure分为三行一列
ax1 = plt.subplot(3, 1, 1)
#【2.3】为第一行窗口创建名字
ax1.set_title("ax1 title")
#【2.4】创建变量,xy
x = np.arange(0, 50, 0.01)
y = np.sin(2 * np.pi * x)
#【1.5】tkinter部分,把第一行窗口显示到第一行
a.plot(x, y, '-r')
#【2.5】matplot部分,打印第一行的窗口显示内容
plt.plot(x,y,'-r')
# plt.show() # 展示
##【2.6】matplot部分,在创建一个窗口,让折线动图使用
plt.subplot(2, 1, 2)
#【3】折线段动图部分
#开启interactive mode 成功的关键函数
plt.ion()
#【3.1】读取本地文件的名字
filename = 'a.txt'
step, dis, gan = [], [], []
with open(filename, 'r') as line:
# 【3.2】按行读取
lines = line.readlines()
# j用于判断读了多少条
j = 0
for line in lines:
#plt.clf() #清空画布上的所有内容
#【3.3】分割txt文档里的内容
temp = line.split('loss ')
t = temp[1].split(',')
step.append(j)
j = j + 1
#【3.4】把dis和gan作为x和y轴
dis.append(float(t[0]))
gan.append(float(temp[2]))
#【1.6】tkinter部分,显示在第二行
b.plot(dis,gan,'-r')
#【3.5】把这个图显示在matplot部分的第二行
plt.plot(dis,gan)
plt.pause(0.1)
#【1.7】tkinter部分的窗口显示,这部分应该就是用于把a和b两个窗口显示到tk的ui界面窗口上去。
canvas = FigureCanvasTkAgg(f, master=root)
canvas.draw() # 注意show方法已经过时了,这里改用draw
canvas.get_tk_widget().pack(side=tkinter.TOP, # 上对齐
fill=tkinter.BOTH, # 填充方式
expand=tkinter.YES) # 随窗口大小调整而调整
# 主循环
#【1.8】tkinter 必须有的部分
root.mainloop()
==================================================
本地文档格式
step 0: dis loss 1, gan loss 2.
step 1: dis loss 3, gan loss 3.946449
step 2: dis loss 4, gan loss 3.388427
step 3: dis loss 10, gan loss 5.132270
step 4: dis loss 15, gan loss 2.586611
step 5: dis loss 30, gan loss 7.208553
step 6: dis loss 35, gan loss 7.141296
step 7: dis loss 40, gan loss 2.121268
step 8: dis loss 45, gan loss 9.549424
step 9: dis loss 50, gan loss 3.946449
step 10: dis loss 56, gan loss 3.388427
step 11: dis loss 80, gan loss 5.13227
step 12: dis loss 80, gan loss 2.586611
step 13: dis loss 100, gan loss 7.208553
step 14: dis loss 110, gan loss 7.141296
step 15: dis loss 120, gan loss 2.121268
step 16: dis loss 250, gan loss 9.549424
step 17: dis loss 300, gan loss 3.94644
step 18: dis loss 400, gan loss 3.388427
step 19: dis loss 450, gan loss 5.132270
step 20: dis loss 500, gan loss 2.586611
step 21: dis loss 600, gan loss 7.208553
===========================================
参考了几篇博客,等整理时候在贴出出处
================
下一步,把翻译软件这个合并起来
=============================
=============================================================================================
下面这个版本是读取本地文档格式
1,2 3,4 5,6 7,8 9,10, 11,15 17,18 20,50 70,80 90,100 100,110 120,150
具体代码为
from matplotlib import pyplot as plt
import tkinter
import numpy as np
from matplotlib.backends.backend_tkagg import FigureCanvasTkAgg, NavigationToolbar2Tk
from matplotlib.backend_bases import key_press_handler
from matplotlib.figure import Figure
import json
from tkinter import *
import requests
#【1】tkinter
#【1.1】创建tkinter的主窗口
root = tkinter.Tk()
#【1.2】tkinter窗口名
root.title("tk窗口(翻译以及画图)")
#【1.3】设置tkinter窗口名大小
root.geometry('800x600') # 这里的乘是小x
#【1.7.1】翻译按钮出发的函数
def fanyi():
content = entry1.get().strip() # 把翻框里需要翻译的内容get过来
url = "http://fanyi.youdao.com/translate?smartresult=dict&smartresult=rule"
data = { # data是截图里的from data里的内容
'i': content,
'doctype': 'json'
}
r = requests.post(url, data=data) # requests的post,和get的主要区别,个人觉得是post可以用来提交一些数据,看附录部分解释
ret = r.content.decode()
result = json.loads(ret)
# print(result)
res.set(result['translateResult'][0][0]['tgt'])
# print(content)
#【1.4】设置标签
Label(root, text="输入任容:", font=('GB2312', 18), fg='blue').grid(row=1, column=0)
Label(root, text="结果:", font=('GB2312', 18), fg='blue').grid(row=2, column=0)
#【1.5】设置文本框
entry1=Text(root, width=20,height=3,font=('GB2312', 18))
#entry1 = Entry(root, font=('GB2312', 18))
entry1.grid(row=1, column=1)
#【1.6】
res = StringVar()
entry2=Text(root, width=20,height=3,font=('GB2312', 18))
#entry2 = Entry(root, font=('GB2312', 18), textvariable=res)
entry2.grid(row=2, column=1)
#【1.7】 设置按钮
Button(root, text="翻译", width=10, font=('GB2312', 18), command=fanyi).grid(row=4, column=0, sticky=W)
Button(root, text="退出", width=10, font=('GB2312', 18), command=root.quit).grid(row=4, column=1, sticky=E)
# 生成用于绘sin图的数据,这个接口可以用于以后实时数据的输入
#【2】matplot部分
#【2.1】matplot部分,创建一个figure
f=plt.figure(figsize=(7, 6))
#【2.2】把figure分为三行一列
a = plt.subplot(3, 1, 1)
b = plt.subplot(3, 1, 2)
c = plt.subplot(3, 1, 3)
#【2.3】为第一行窗口创建名字
a.set_title("a")
#【2.4】创建变量,xy
x = np.arange(0, 50, 0.01)
y = np.sin(2 * np.pi * x)
# #【2.5】matplot部分,打印第一行的窗口显示内容
a.plot(x,y,'-r')
#
#【3】matplot画折线段动图部分,这部分留做本地数据的读入
#开启interactive mode 成功的关键函数
plt.ion()
#【3.1】读取本地文件的名字
filename = 'a.txt'
step, dis, gan = [], [], []
with open(filename, 'r') as line:
# 【3.2】按行读取
lines = line.readlines()
# j用于判断读了多少条
j = 0
for line in lines:
#plt.clf() #清空画布上的所有内容
#【3.3】分割txt文档里的内容
t = line.split(',')
print(t)
# t = temp[1].split(',')
# step.append(j)
j = j + 1
# #【3.4】把dis和gan作为x和y轴
dis.append(float(t[0]))
gan.append(float(t[1]))
print(t[1])
# #【3.5】matplot显示在第二行
b.plot(dis,gan,'-r')
# #【3.6】把这个图显示在matplot部分的第二行
plt.pause(0.1)
plt.show() # 展示
#【1.8】tkinter部分的窗口显示,这部分应该就是用于把a和b两个窗口显示到tk的ui界面窗口上去。
#将绘制的图形显示到tkinter---创建属于root的canvas画布,并将图f置于画布上
canvas = FigureCanvasTkAgg(f, master=root)
canvas.draw() # 注意show方法已经过时了,这里改用draw
#【1.9】下面两种布局方式二选一
canvas.get_tk_widget().grid(row=5, column=0)
# canvas.get_tk_widget().pack(side=tkinter.TOP, # 上对齐
# fill=tkinter.BOTH, # 填充方式
# expand=tkinter.YES) # 随窗口大小调整而调整
# 主循环
#【1.10】tkinter 必须有的部分
root.mainloop()
效果如图