Python 从matplotlib到tkinter获取值

Python 从matplotlib到tkinter获取值,python,matplotlib,tkinter,Python,Matplotlib,Tkinter,我正在从tkinter gui打开matplotlib窗口。将限制返回到tkinter以处理具有预定义限制的下一个窗口打开事件是有用的。为此,我在matplotlib窗口的菜单中定义了一个新按钮,该按钮可以将限制写入console,但不能写入TK窗口 我尝试了以下操作,但由于未知原因导致崩溃: from Tkinter import * import matplotlib.pyplot as plt master = Tk() e = Entry(master) e.pack() e.fo

我正在从tkinter gui打开matplotlib窗口。将限制返回到tkinter以处理具有预定义限制的下一个窗口打开事件是有用的。为此,我在matplotlib窗口的菜单中定义了一个新按钮,该按钮可以将限制写入console,但不能写入TK窗口

我尝试了以下操作,但由于未知原因导致崩溃:

from Tkinter import *
import matplotlib.pyplot as plt

master = Tk()

e = Entry(master)
e.pack()

e.focus_set()

def callback():
    def a():
        print(ax.get_xlim())
        e.delete(0, END)
        e.insert(0, ax.get_xlim()[0])

    fig,ax = plt.subplots(1, 1)
    plt.plot([1, 2, 3])
    fig.canvas.manager.toolbar.addAction("Write limit\nback to gui",a)
    plt.show()

b = Button(master, text="Open matplotlib", width=15, command=callback)
b.pack()

mainloop()
我尝试过的一个可行的替代方法是使用回调,但如果能够即时显示信息,那就太好了

from Tkinter import *
import matplotlib.pyplot as plt

master = Tk()
global A
A=[]
e = Entry(master)
e.pack()

e.focus_set()

def func(Hubbel):
    if len(A):
        e.delete(0, END)
        e.insert(0, A[0])

master.bind("<FocusIn>", func)

def callback():
    def a():
        print(ax.get_xlim())
        print(A)
        if len(A)==0:
            A.append(ax.get_xlim())
        else:
            A[0]=ax.get_xlim()

    fig,ax = plt.subplots(1, 1)
    plt.plot([1, 2, 3])
    fig.canvas.manager.toolbar.addAction("Write limit\nback to gui",a)
    plt.show()

b = Button(master, text="Open matplotlib", width=15, command=callback)
b.pack()

mainloop()
从Tkinter导入*
将matplotlib.pyplot作为plt导入
master=Tk()
全球A
A=[]
e=入口(主)
e、 包()
e、 焦点集()
def func(哈贝尔):
如属第(A)款:
e、 删除(0,结束)
e、 插入(0,A[0])
master.bind(“,func)
def callback():
定义a():
打印(ax.get_xlim())
印刷品(A)
如果len(A)==0:
A.append(ax.get_xlim())
其他:
A[0]=ax.get_xlim()
图,ax=plt子批次(1,1)
plt.绘图([1,2,3])
图.canvas.manager.toolbar.addAction(“写入限制\n返回到gui”,a)
plt.show()
b=按钮(主控,text=“打开matplotlib”,宽度=15,命令=回调)
b、 包()
mainloop()
plt.show()
阻止tkinter应用程序事件循环的执行。关闭由
plt.show()
创建的绘图窗口后,将正确插入值,因为此时正在处理tk事件

避免这种情况的一种方法是调用
fig.show()
。这只会起作用,因为您已经运行了tk事件循环。

plt.show()
会阻止tkinter应用程序的事件循环的执行。关闭由
plt.show()
创建的绘图窗口后,将正确插入值,因为此时正在处理tk事件

避免这种情况的一种方法是调用
fig.show()
。这只会起作用,因为您已经运行了tk事件循环。

如果我改用fig.show(),则我的机器上的行为完全相同如果改用fig.show(),则我的机器上的行为完全相同