Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/iphone/37.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
python中savefig中的键事件。怎么做?_Python_Image Processing_Keyboard_Matplotlib - Fatal编程技术网

python中savefig中的键事件。怎么做?

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

我正在尝试理解python的一些代码。我想通过缩放选择打开图像的一部分并保存所选部分。 现在我正试图通过按一个键来快速保存打开和缩放的图像。为了更好地解释,我需要通过按键盘键启动函数savefig()

我尝试使用urwid模块:

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