【问题标题】:Get value from matplotlib to tkinter从 matplotlib 获取价值到 tkinter
【发布时间】:2019-02-14 16:05:39
【问题描述】:

我正在从 tkinter gui 打开 matplotlib Windows。将限制返回给 tkinter 以处理具有预定义限制的下一个窗口打开事件将很有用。为此,我在 matplotlib 窗口的菜单中定义了一个新按钮,它应该可以将限制写入控制台,但不能写入 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()

【问题讨论】:

    标签: python matplotlib tkinter


    【解决方案1】:

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

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

    【讨论】:

    • 如果我使用 fig.show() 代替,我的机器上的行为完全一样
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-01-08
    • 2019-06-08
    • 2023-03-14
    • 2016-03-30
    • 1970-01-01
    相关资源
    最近更新 更多