我正在使用PyQt4中包含通过使用2D阵列matplotlib的imshow显示图像的GUI。如果我用pyplot显示它,如果将鼠标移动到图像上,窗口将显示光标的x,y坐标。但是,当我将imshow嵌入到pyqt GUI中时,这似乎消失了。有没有一种方法可以让鼠标事件调用某个函数,该函数会返回鼠标悬停点的x,y坐标(或者更好,还有那个二维数组的索引)?matplotlib GUI imshow坐标
编辑:我找到了wx的文档,但我仍然不知道如何为我的GUI做到这一点。 wxcursor_demo
如果有帮助,这里是我如何嵌入imshow情节。首先,我创建一个基画布类,然后从该我创建一个类用于imshow:
class Canvas(FigureCanvas):
def __init__(self, parent = None, width = 5, height = 5, dpi = 100, projection = None):
self.fig = Figure(figsize = (width, height), dpi = dpi)
if projection:
self.axes = Axes3D(self.fig)
else:
self.axes = self.fig.add_subplot(111)
self.axes.tick_params(axis = 'both', which = 'major', labelsize = 8)
self.axes.tick_params(axis = 'both', which = 'minor', labelsize = 8)
self.compute_initial_figure()
FigureCanvas.__init__(self, self.fig)
self.setParent(parent)
FigureCanvas.setSizePolicy(self, QtGui.QSizePolicy.Expanding, QtGui.QSizePolicy.Expanding)
FigureCanvas.updateGeometry(self)
def compute_initial_figure(self):
pass
class TopView(Canvas):
def __init__(self, *args, **kwargs):
Canvas.__init__(self, *args, **kwargs)
self.divider = make_axes_locatable(self.axes)
self.cax = self.divider.append_axes("bottom", size = "5%", pad = 0.2)
def compute_initial_figure(self):
self.top = self.axes.imshow(zarr, interpolation = 'none', extent = [xmin, xmax, ymin, ymax], origin = 'lower')
self.top.set_cmap('nipy_spectral')
self.top.set_clim(vmin = pltMin, vmax = pltMax)
然后,在主窗口中,我创建对象,并将其放置在网格布局:
tv = TopView(self.main_widget, width = 4, height = 3, dpi = 100)
self.g.addWidget(tv, 1, 2, 3, 1)