将矢量图嵌入到Tkinter中

时间:2017-09-30 10:03:52

标签: python matplotlib vector tkinter

我已经在这方面工作了一段时间,但我似乎无法克服它。问题是我想在tkinter窗口中插入一个矢量表示。我设法将线条和功能绘制到tkinter中,但是矢量是一个完全不同的故事。 这是我到目前为止嵌入的代码:

import matplotlib
matplotlib.use('TkAgg')

from numpy import arange, sin, pi
from matplotlib.backends.backend_tkagg import FigureCanvasTkAgg, NavigationToolbar2TkAgg
from matplotlib.backend_bases import key_press_handler


from matplotlib.figure import Figure

import tkinter as Tk


root = Tk.Tk()
root.wm_title("Embedding in TK")

f = Figure(figsize=(5, 4), dpi=100)
a = f.add_subplot(111)

a.plot([7,8], [2, 4])

canvas = FigureCanvasTkAgg(f, master=root)
canvas.show()
canvas.get_tk_widget().pack(side=Tk.TOP, fill=Tk.BOTH, expand=1)


Tk.mainloop()

绘制矢量的代码:

import matplotlib.pyplot as plt
import numpy as np
import tkinter as Tk


v1 = (3, -4)
v2 = (-6,4, 10)

soa = np.array([[0, 0, v1[0], v1[1]], [0, 0, v2[0], v2[1]]])
X, Y, U, V = zip(*soa)
plt.figure()
ax = plt.gca()
ax.quiver(X, Y, U, V, angles='xy', scale_units='xy', scale=1)
ax.set_xlim([-10, 10])
ax.set_ylim([-5, 11])
plt.draw()

plt.show()

Tk.mainloop()

也许有办法合并这两个?

1 个答案:

答案 0 :(得分:0)

我认为您可以从matplotlib页面上阅读更多内容并查看示例中获益。那么你就会让自己变得比实际需要的更难。首先类似地调用类似的东西。在第一种情况下,您有一个轴a,在第二种情况下,您将其称为ax,appart唯一的区别是您需要.plot代替.quiver plt.show 。您不需要canvas.show(),因为您有import matplotlib matplotlib.use('TkAgg') from matplotlib.backends.backend_tkagg import FigureCanvasTkAgg import numpy as np from matplotlib.figure import Figure import tkinter as Tk root = Tk.Tk() root.wm_title("Embedding in TK") f = Figure(figsize=(5, 4), dpi=100) ax = f.add_subplot(111) v1 = (3, -4) v2 = (-6,4, 10) soa = np.array([[0, 0, v1[0], v1[1]], [0, 0, v2[0], v2[1]]]) X, Y, U, V = zip(*soa) ax.quiver(X, Y, U, V, angles='xy', scale_units='xy', scale=1) ax.set_xlim([-10, 10]) ax.set_ylim([-5, 11]) canvas = FigureCanvasTkAgg(f, master=root) canvas.show() canvas.get_tk_widget().pack(side=Tk.TOP, fill=Tk.BOTH, expand=1) Tk.mainloop()

{{1}}