not*_*ink 6 python tkinter matplotlib
我正在尝试更新 Tkinter gui 中的 matplotlib imshow 窗口中的数据,我的代码示例如下:
#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()
Run Code Online (Sandbox Code Playgroud)
如您所见,我使用 imshow() 加载图像,然后尝试使用 set_data() 更新图像的数据,然后想要使用 root.update() 更新 gui 的根窗口。执行时,打印“旋转按钮按下...”行被执行,但其余部分似乎没有执行。我是否需要以某种方式将图像句柄传递给旋转函数,或者返回旋转后的图像?
画布需要重新绘制,试试这个:
def rotate(*args):
print 'rotate button press...'
theta = 90
rotated = ndimage.rotate(image, theta)
im.set_data(rotated)
canvas.draw()
Run Code Online (Sandbox Code Playgroud)
更新以保持旋转
请注意,这是另存image为 的属性root。也许不是最好的方法,但它适用于示例。
root = Tk.Tk()
root.wm_title("minimal example")
root.image = plt.imread('test.jpg')
fig = plt.figure(figsize=(5,4))
im = plt.imshow(root.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...'
root.image = ndimage.rotate(root.image, 90)
im.set_data(root.image)
canvas.draw()
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
9198 次 |
| 最近记录: |