Я делаю графический интерфейс, используя pyqt4, который содержит изображение, отображаемое imshow matplotlib с использованием массива 2d. Если бы я отобразил это с помощью pyplot, в окне отобразились бы координаты x, y курсора, если я наведу указатель мыши на изображение. Однако это, похоже, исчезло, когда я встроил imshow в графический интерфейс pyqt. Есть ли способ заставить событие мыши вызывать некоторую функцию, которая возвращает эти координаты x, y (или, что еще лучше, индексы этого массива 2d) точки, над которой находится мышь?
EDIT: я нашел документацию для wx, но до сих пор не знаю, как это сделать для своего графического интерфейса. 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)