Я пытаюсь обновить данные в окне Matplotlib imshow в Tkinter GUI, пример моего кода выглядит следующим образом:обновление Matplotlib imshow изнутри графического интерфейса Tkinter
#minimal example...
import matplotlib, sys
matplotlib.use('TkAgg')
from matplotlib.backends.backend_tkagg import FigureCanvasTkAgg
from matplotlib import pylab as plt
from scipy import ndimage
if sys.version_info[0] < 3:
import Tkinter as Tk
else:
import tkinter as Tk
root = Tk.Tk()
root.wm_title("minimal example")
image = plt.imread('test.jpg')
fig = plt.figure(figsize=(5,4))
im = plt.imshow(image) # later use a.set_data(new_data)
ax = plt.gca()
ax.set_xticklabels([])
ax.set_yticklabels([])
# a tk.DrawingArea
canvas = FigureCanvasTkAgg(fig, master=root)
canvas.show()
canvas.get_tk_widget().pack(side=Tk.TOP, fill=Tk.BOTH, expand=1)
def rotate(*args):
print 'rotate button press...'
theta = 90
rotated = ndimage.rotate(image, theta)
im.set_data(rotated)
root.update()
def quit(*args):
print 'quit button press...'
root.quit()
root.destroy()
button_rotate = Tk.Button(master = root, text = 'Rotate', command = rotate)
button_quit = Tk.Button(master = root, text = 'Quit', command = quit)
button_quit.pack(side=Tk.LEFT)
button_rotate.pack()
Tk.mainloop()
Как вы можете видеть, я загрузите изображение с помощью imshow(), а затем попробуйте обновить данные изображения с помощью set_data(), а затем хотите обновить корневое окно gui с помощью root.update(). При выполнении выполняется печать строки «Повернуть кнопку нажмите ...», но, похоже, нет. Нужно ли мне передать дескриптор изображения функции вращения каким-либо образом или вернуть повернутое изображение?
не импортируйте 'pyplot', если вы встраиваете. Вы в конечном итоге с дуэли gui основные петли. – tacaswell
@tcaswell Это имеет смысл, но если я не использую 'pylot', как я могу получить доступ к' imshow() '? –
См. Http://stackoverflow.com/questions/14254379/how-can-i-attach-a-pyplot-function-to-a-figure-instance/14261698#14261698 – tacaswell