Получить значение от matplotlib до tkinter - PullRequest
0 голосов
/ 14 февраля 2019

Я открываю Windows Matplotlib из графического интерфейса tkinter.Было бы полезно вернуть лимиты обратно в tkinter для обработки следующего открытого окна Event с предопределенными лимитами.Для этого я определил новую кнопку в меню окна 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()

Работающая альтернатива, которую я попробовал, - это использовать обратные вызовы, но было бы неплохо, чтобы отображалась информацияinstantaniously.

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

1 Ответ

0 голосов
/ 14 февраля 2019

plt.show() блокирует выполнение цикла обработки событий вашего приложения tkinter.После закрытия окна построения, созданного с помощью plt.show(), вам будет вставлена ​​корректность значений, потому что в этот момент обрабатываются события tk.

Чтобы избежать этого, нужно позвонить fig.show().Это будет работать только потому, что у вас уже запущен цикл событий tk.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...