python中savefig中的键事件。怎么做?
我正在尝试理解python的一些代码。我想通过缩放选择打开图像的一部分并保存所选部分。 现在我正试图通过按一个键来快速保存打开和缩放的图像。为了更好地解释,我需要通过按键盘键启动函数savefig() 我尝试使用urwid模块:python中savefig中的键事件。怎么做?,python,image-processing,keyboard,matplotlib,Python,Image Processing,Keyboard,Matplotlib,我正在尝试理解python的一些代码。我想通过缩放选择打开图像的一部分并保存所选部分。 现在我正试图通过按一个键来快速保存打开和缩放的图像。为了更好地解释,我需要通过按键盘键启动函数savefig() 我尝试使用urwid模块: import urwid import PIL import Image im=Image.Open("fig.tif") imshow(im) def save(input): if input in ('s'): savefig("fi
import urwid
import PIL
import Image
im=Image.Open("fig.tif")
imshow(im)
def save(input):
if input in ('s'):
savefig("fig2.png")
我也曾试着做同样的事情:
import uinput
import PIL
import Image
def main():
capabilities = {uinput.EV_KEY: (uinput.KEY_S)}
device = uinput.Device(name="python-uinput-keyboard", capabilities=capabilities)
if device.emit(uinput.EV_KEY, uinput.KEY_S, 1):
savefig("sat.png")
im=Image.open("fig.tif")
imshow(im)
我在这两个代码中得到了相同的结果,出现了以下错误消息:
Exception in Tkinter callback
Traceback (most recent call last):
File "/usr/lib/python2.6/lib-tk/Tkinter.py", line 1413, in call
return self.func(*args)
File "/usr/lib/pymodules/python2.6/matplotlib/backends/backend_tkagg.py", line 312, in key_press
FigureCanvasBase.key_press_event(self, key, guiEvent=event)
File "/usr/lib/pymodules/python2.6/matplotlib/backend_bases.py", line 1143, in key_press_event
self.callbacks.process(s, event)
File "/usr/lib/pymodules/python2.6/matplotlib/cbook.py", line 163, in process func(*args, **kwargs)
File "/usr/lib/pymodules/python2.6/matplotlib/backend_bases.py", line 1703, in key_press self.canvas.toolbar.save_figure(self.canvas.toolbar)
TypeError: save_figure() takes exactly 1 argument (2 given)
这是因为我从来没有打开过Tkinter。请帮助我,我如何保存带有关键事件的缩放图像
很抱歉,我对python一无所知,我对这一点很陌生。您没有明确地说出来,但似乎您正在使用matplotlib来实现这一点 从您发布的内容来看,我无法确定,但我想发生的是,
s
已经绑定到matplotlib图形的“保存图形”(默认情况下,matplotlib使用基于Tk的后端,因此Tk错误)
无需使用urwid
模块。Matplotlib有钩子来做类似的事情,您需要断开其中一些钩子来做您需要的事情
作为重现您的问题的简单、独立的示例:
import matplotlib.pyplot as plt
import numpy as np
def save(event):
if event.key == 's':
print 'Saved figure'
event.canvas.figure.savefig('temp.png')
fig, ax = plt.subplots()
ax.imshow(np.random.random((10,10)))
fig.canvas.mpl_connect('key_press_event', save)
plt.show()
请注意,图形将被保存,但您还将获得一个弹出的文件选择对话框以再次保存图形
您可以通过以下两种方法来避免这种情况:a)使用不同的键(不在中)或b)临时禁用matplotlib的's'
键绑定以保存
用适当的方法暂时禁用它是非常容易的
import matplotlib.pyplot as plt
import matplotlib as mpl
import numpy as np
# Disable the 's' interactive keybinding
mpl.rcParams['keymap.save'] = ''
def save(event):
if event.key == 's':
print 'Saved figure'
event.canvas.figure.savefig('temp.png')
fig, ax = plt.subplots()
ax.imshow(np.random.random((10,10)))
fig.canvas.mpl_connect('key_press_event', save)
plt.show()