080-matplot-tkinter-动态显示-翻译

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
#https://blog.csdn.net/Y_principal/article/details/106064403

#【1】tkinter
#【1.1】创建tkinter的主窗口
root = tkinter.Tk()
#【1.2】tkinter窗口名
root.title("tk窗口(翻译以及画图)")
#【1.3】设置tkinter窗口名大小
root.geometry('700x500')  # 这里的乘是小x
#https://blog.csdn.net/Y_principal/article/details/106064403
#【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)



#https://blog.csdn.net/Y_principal/article/details/106064403
# 生成用于绘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')


#https://blog.csdn.net/Y_principal/article/details/106064403
#【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
#https://blog.csdn.net/Y_principal/article/details/106064403

 

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()

 

 

效果如图

 

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值