pythontkinter在一块区域中绘图_在Python中将绘图放置在Tkinter主窗口上

我有一个处理数据然后绘制结果的程序.通常在Python中,图表显示在一个新窗口中,但我想在同一个Tkinter窗口中显示该图.我搜索并找到了这两个答案,Python Tkinter Embed Matplotlib in GUI和How do I refresh a matplotlib plot in a Tkinter window?.他们说我们应该首先制作一个画布,然后使用网格或包装将它放在窗口上.这是我第一次使用canvas,我已经应用了这个概念,这里有一个工作示例代码,

from matplotlib.backends.backend_tkagg import FigureCanvasTkAgg

__author__ = 'Dania'

import numpy as np

from Tkinter import *

import matplotlib.pyplot as plt

class mclass:

def __init__(self, window):

self.box = Entry(window)

self.button = Button (window, text="check", command=self.plot)

self.box.pack ()

self.button.pack()

def plot (self):

x=np.array ([1, 2, 3, 4, 5, 6, 7, 8, 9, 10])

v= np.array ([16,16.31925,17.6394,16.003,17.2861,17.3131,19.1259,18.9694,22.0003,22.81226])

p= np.array ([16.23697, 17.31653, 17.22094, 17.68631, 17.73641 , 18.6368,

19.32125, 19.31756 , 21.20247 , 22.41444 , 22.11718 , 22.12453])

plt.scatter(v,x,color='red')

plt.plot(p, range(2 +max(x)),color='blue')

plt.gca().invert_yaxis()

plt.suptitle ("Estimation Grid", fontsize=16)

plt.ylabel("Y", fontsize=14)

plt.xlabel("X", fontsize=14)

plt.show()

plt.gcf().canvas.draw()

fig = plt.figure()

canvas = FigureCanvasTkAgg(fig, master=window)

canvas.get_tk_widget().grid(row=1,column=24)

canvas.draw()

window= Tk()

start= mclass (window)

window.mainloop()

上面的代码首先在一个单独的窗口中显示该图,然后在网格中指定的位置显示一个没有绘图的灰色画布.此外,画布垂直展开,窗口的一部分消失,换句话说,画布将内容向下推,并且它们不再出现,因为没有垂直滚动条出现.

我想在同一个Tkinter窗口中显示该情节,如果有任何内容被推下来,我希望能够滚动窗口.

编辑:问题中添加了一个工作示例代码.

任何人都可以告诉我我做了什么错,以及如何解决问题?

任何帮助表示赞赏.

谢谢.

解决方法:

主要变化:

>使用matplolib.figure代替matplotlib.pyplot(并重命名所有相关函数)

>添加self.window变量

>到处使用pack()(你不能在一个容器中混合网格和包装.)

结果:

__author__ = 'Dania'

import matplotlib

matplotlib.use('TkAgg')

import numpy as np

from matplotlib.backends.backend_tkagg import FigureCanvasTkAgg

from matplotlib.figure import Figure

from Tkinter import *

class mclass:

def __init__(self, window):

self.window = window

self.box = Entry(window)

self.button = Button (window, text="check", command=self.plot)

self.box.pack ()

self.button.pack()

def plot (self):

x=np.array ([1, 2, 3, 4, 5, 6, 7, 8, 9, 10])

v= np.array ([16,16.31925,17.6394,16.003,17.2861,17.3131,19.1259,18.9694,22.0003,22.81226])

p= np.array ([16.23697, 17.31653, 17.22094, 17.68631, 17.73641 , 18.6368,

19.32125, 19.31756 , 21.20247 , 22.41444 , 22.11718 , 22.12453])

fig = Figure(figsize=(6,6))

a = fig.add_subplot(111)

a.scatter(v,x,color='red')

a.plot(p, range(2 +max(x)),color='blue')

a.invert_yaxis()

a.set_title ("Estimation Grid", fontsize=16)

a.set_ylabel("Y", fontsize=14)

a.set_xlabel("X", fontsize=14)

canvas = FigureCanvasTkAgg(fig, master=self.window)

canvas.get_tk_widget().pack()

canvas.draw()

window= Tk()

start= mclass (window)

window.mainloop()

标签:python,canvas,matplotlib,plot,tkinter

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值