def size_allocate(self, widget, allocation): dpival = self.figure.dpi winch = allocation.width / dpival hinch = allocation.height / dpival self.figure.set_size_inches(winch, hinch, forward=False) FigureCanvasBase.resize_event(self) self.draw_idle()
def scroll_event(self, widget, event): x = event.x # flipy so y=0 is bottom of canvas y = self.get_allocation().height - event.y step = 1 if event.direction == Gdk.ScrollDirection.UP else -1 FigureCanvasBase.scroll_event(self, x, y, step, guiEvent=event) return False # finish event propagation?
def button_release_event(self, widget, event): x = event.x # flipy so y=0 is bottom of canvas y = self.get_allocation().height - event.y FigureCanvasBase.button_release_event( self, x, y, event.button, guiEvent=event) return False # finish event propagation?
def __init__(self, figure): if _debug: print 'FigureCanvasGTK.%s' % fn_name() FigureCanvasBase.__init__(self, figure) gtk.DrawingArea.__init__(self) self._idle_draw_id = 0 self._need_redraw = True self._pixmap_width = -1 self._pixmap_height = -1 self._lastCursor = None self.connect('scroll_event', self.scroll_event) self.connect('button_press_event', self.button_press_event) self.connect('button_release_event', self.button_release_event) self.connect('configure_event', self.configure_event) self.connect('expose_event', self.expose_event) self.connect('key_press_event', self.key_press_event) self.connect('key_release_event', self.key_release_event) self.connect('motion_notify_event', self.motion_notify_event) self.connect('leave_notify_event', self.leave_notify_event) self.connect('enter_notify_event', self.enter_notify_event) self.set_events(self.__class__.event_mask) self.set_double_buffered(False) self.set_flags(gtk.CAN_FOCUS) self._renderer_init() self._idle_event_id = gobject.idle_add(self.idle_event)
def button_release_event(self, widget, event): if _debug: print 'FigureCanvasGTK.%s' % fn_name() x = event.x # flipy so y=0 is bottom of canvas y = self.allocation.height - event.y FigureCanvasBase.button_release_event(self, x, y, event.button, guiEvent=event) return False # finish event propagation?
def mouseDoubleClickEvent(self, event): x, y = self.mouseEventCoords(event.pos()) button = self.buttond.get(event.button()) if button is not None: FigureCanvasBase.button_press_event(self, x, y, button, dblclick=True, guiEvent=event)
def __init__(self, figure): if _debug: print "FigureCanvasGTK.%s" % fn_name() FigureCanvasBase.__init__(self, figure) gtk.DrawingArea.__init__(self) self._idleID = 0 self._need_redraw = True self._pixmap_width = -1 self._pixmap_height = -1 self._lastCursor = None self.connect("scroll_event", self.scroll_event) self.connect("button_press_event", self.button_press_event) self.connect("button_release_event", self.button_release_event) self.connect("configure_event", self.configure_event) self.connect("expose_event", self.expose_event) self.connect("key_press_event", self.key_press_event) self.connect("key_release_event", self.key_release_event) self.connect("motion_notify_event", self.motion_notify_event) self.set_events(self.__class__.event_mask) self.set_double_buffered(False) self.set_flags(gtk.CAN_FOCUS) self._renderer_init()
def __init__(self, figure): if _figure_ports['count'] >= FIGURE_LIMIT: logger.warning("Figure limit of %i reached. Returning NULL figure" % FIGURE_LIMIT) return None FigureCanvasBase.__init__(self, figure) self.frame_count = 0 self._user_event = None self._user_cmd_ret = None self._server_port = new_web_port() self._request_handlers = {} self._frame = None self._header = "" self._home_x = {} self._home_y = {} self._zoomed = False self._panned = False self._first_frame = True self._custom_content = None self._width, self._height = self.get_width_height() self.flip = Affine2D().scale(1, -1).translate(0, self._height) logger.debug("Initialising figure of width: %i, height: %i" % (self._width, self._height)) logger.debug("Creating canvas web server on port %i" % self._server_port) try: self._server = simple_server.WebSocketServer(('', self._server_port), self.web_socket_transfer_data, simple_server.WebSocketRequestHandler) self._thread = thread.start_new_thread(self._server.serve_forever, ()) register_web_server(self._server_port, self) except Exception, e: logger.error("Failed to create webserver. (%s)" % str(e)) sys.exit(1)
def __init__(self, figure): if _debug: print('FigureCanvasGTK3.%s' % fn_name()) FigureCanvasBase.__init__(self, figure) GObject.GObject.__init__(self) self._idle_draw_id = 0 self._need_redraw = True self._lastCursor = None self.connect('scroll_event', self.scroll_event) self.connect('button_press_event', self.button_press_event) self.connect('button_release_event', self.button_release_event) self.connect('configure_event', self.configure_event) self.connect('draw', self.on_draw_event) self.connect('key_press_event', self.key_press_event) self.connect('key_release_event', self.key_release_event) self.connect('motion_notify_event', self.motion_notify_event) self.connect('leave_notify_event', self.leave_notify_event) self.connect('enter_notify_event', self.enter_notify_event) self.connect('size_allocate', self.size_allocate) self.set_events(self.__class__.event_mask) self.set_double_buffered(True) self.set_can_focus(True) self._renderer_init() self._idle_event_id = GLib.idle_add(self.idle_event) default_context = GLib.main_context_get_thread_default() or GLib.main_context_default() self._idle_event_source = default_context.find_source_by_id(self._idle_event_id)
def enterEvent(self, event): try: x, y = self.mouseEventCoords(event.pos()) except AttributeError: # the event from PyQt4 does not include the position x = y = None FigureCanvasBase.enter_notify_event(self, guiEvent=event, xy=(x, y))
def mouseMoveEvent(self, event): x = event.x() # flipy so y=0 is bottom of canvas y = self.figure.bbox.height - event.y() FigureCanvasBase.motion_notify_event(self, x, y) if DEBUG: print("mouse move")
def key_release_event(self, widget, event): if _debug: print 'FigureCanvasGTK.%s' % fn_name() key = self._get_key(event) if _debug: print "release", key FigureCanvasBase.key_release_event(self, key) return False # finish event propagation?
def mouseReleaseEvent( self, event ): x = event.x() # flipy so y=0 is bottom of canvas y = self.figure.bbox.height() - event.y() FigureCanvasBase.button_release_event( self, x, y, event.button() ) if DEBUG: print 'button released' self.draw()
def __init__(self, figure): FigureCanvasBase.__init__(self, figure) GObject.GObject.__init__(self) self._idle_draw_id = 0 self._lastCursor = None self.connect('scroll_event', self.scroll_event) self.connect('button_press_event', self.button_press_event) self.connect('button_release_event', self.button_release_event) self.connect('configure_event', self.configure_event) self.connect('draw', self.on_draw_event) self.connect('key_press_event', self.key_press_event) self.connect('key_release_event', self.key_release_event) self.connect('motion_notify_event', self.motion_notify_event) self.connect('leave_notify_event', self.leave_notify_event) self.connect('enter_notify_event', self.enter_notify_event) self.connect('size_allocate', self.size_allocate) self.set_events(self.__class__.event_mask) self.set_double_buffered(True) self.set_can_focus(True) self._renderer_init() default_context = GLib.main_context_get_thread_default() or GLib.main_context_default()
def mouseDoubleClickEvent( self, event ): x = event.pos().x() # flipy so y=0 is bottom of canvas y = self.figure.bbox.height - event.pos().y() button = self.buttond[event.button()] FigureCanvasBase.button_press_event( self, x, y, button, dblclick=True ) if DEBUG: print('button doubleclicked:', event.button())
def mouseReleaseEvent( self, event ): x = event.x() # flipy so y=0 is bottom of canvas y = self.figure.bbox.height - event.y() button = self.buttond[event.button()] FigureCanvasBase.button_release_event( self, x, y, button ) if DEBUG: print 'button released'
def mousePressEvent( self, event ): x = event.pos().x() # flipy so y=0 is bottom of canvas y = self.figure.bbox.height - event.pos().y() button = self.buttond[event.button()] FigureCanvasBase.button_press_event( self, x, y, button ) if DEBUG: print 'button pressed:', event.button()
def wheelEvent( self, event ): x = event.x() y = self.figure.bbox.height - event.y() steps = event.delta()/120 if (event.orientation() == Qt.Qt.Vertical): FigureCanvasBase.scroll_event( self, x, y, steps) if DEBUG: print 'scroll event : delta = %i, steps = %i ' % (event.delta(),steps)
def keyPressEvent(self, event): key = self._get_key(event) if key is None: return FigureCanvasBase.key_press_event(self, key, guiEvent=event) if DEBUG: print('key press', key)
def keyReleaseEvent(self, event): key = self._get_key(event) if key is None: return FigureCanvasBase.key_release_event(self, key, guiEvent=event) if DEBUG: print('key release', key)
def button_press_event(self, widget, event): if _debug: print 'FigureCanvasGTK.{0!s}'.format(fn_name()) x = event.x # flipy so y=0 is bottom of canvas y = self.allocation.height - event.y FigureCanvasBase.button_press_event(self, x, y, event.button) return False # finish event propagation?
def resize(self, width, height): self.renderer.set_width_height(width, height) dpi = self.figure.dpi width /= dpi height /= dpi self.figure.set_size_inches(width, height) FigureCanvasBase.resize_event(self)
def __init__(self, figure): if _debug: print 'FigureCanvasGTK.%s' % fn_name() FigureCanvasBase.__init__(self, figure) gtk.DrawingArea.__init__(self) self._idleID = 0 self._need_redraw = True self._pixmap_width = -1 self._pixmap_height = -1 self._lastCursor = None self.connect('button_press_event', self.button_press_event) self.connect('button_release_event', self.button_release_event) self.connect('configure_event', self.configure_event) self.connect('expose_event', self.expose_event) self.connect('key_press_event', self.key_press_event) self.connect('key_release_event', self.key_release_event) self.connect('motion_notify_event', self.motion_notify_event) self.set_events( gdk.BUTTON_PRESS_MASK | gdk.BUTTON_RELEASE_MASK | gdk.EXPOSURE_MASK | gdk.KEY_PRESS_MASK | gdk.KEY_RELEASE_MASK | gdk.LEAVE_NOTIFY_MASK | gdk.POINTER_MOTION_MASK | gdk.POINTER_MOTION_HINT_MASK) self.set_double_buffered(False) self.set_flags(gtk.CAN_FOCUS) self._renderer_init()
def __init__( self, figure ): if DEBUG: print('FigureCanvasQt: ', figure) _create_qApp() QtGui.QWidget.__init__( self ) FigureCanvasBase.__init__( self, figure ) self.figure = figure self.setMouseTracking( True ) self._idle = True # hide until we can test and fix #self.startTimer(backend_IdleEvent.milliseconds) w,h = self.get_width_height() self.resize( w, h ) # JDH: Note the commented out code below does not work as # expected, because according to Pierre Raybaut, The reason is # that PyQt fails (silently) to call a method of this object # just before detroying it. Using a lambda function will work, # exactly the same as using a function (which is not bound to # the object to be destroyed). # #QtCore.QObject.connect(self, QtCore.SIGNAL('destroyed()'), # self.close_event) QtCore.QObject.connect(self, QtCore.SIGNAL('destroyed()'), lambda: self.close_event())
def __init__(self, figure): FigureCanvasBase.__init__(self, figure) gtk.DrawingArea.__init__(self) self._idleID = 0 self._draw_pixmap = True self._pixmap_width = -1 self._pixmap_height = -1 self._lastCursor = None self.set_flags(gtk.CAN_FOCUS) self.grab_focus() self.set_double_buffered(False) self.connect('key_press_event', self.key_press_event) self.connect('key_release_event', self.key_release_event) self.connect('expose_event', self.expose_event) self.connect('configure_event', self.configure_event) self.connect('motion_notify_event', self.motion_notify_event) self.connect('button_press_event', self.button_press_event) self.connect('button_release_event', self.button_release_event) self.set_events( #gdk.FOCUS_CHANGE_MASK | gdk.KEY_PRESS_MASK | gdk.KEY_RELEASE_MASK | gdk.EXPOSURE_MASK | gdk.LEAVE_NOTIFY_MASK | gdk.BUTTON_PRESS_MASK | gdk.BUTTON_RELEASE_MASK | gdk.POINTER_MOTION_MASK ) self._renderer_init()
def __init__(self, figure): FigureCanvasBase.__init__(self, figure) # print "Init of Canvas called....",figure self.frame_count = 0 global figure_number self.figure_number = figure_number figure_number += 1 self._clients = set() self._frame = None self._header = "" self._home_x = {} self._home_y = {} self._zoomed = False self._first_frame = True self._width, self._height = self.get_width_height() self.flip = Affine2D().scale(1, -1).translate(0, self._height) # Start WebSocket server try: self._server = websocket.WebSocketApp( "ws://" + HOST + ":" + PORT + "/client/" + SESSION_ID, on_open=self.web_socket_open, on_message=self.web_socket_message, on_close=self.web_socket_close, on_error=self.web_socket_close, ) self._thread = thread.start_new_thread(self._server.run_forever, ()) except Exception, e: print "Failed to create websocket server. (%s)" % str(e) # sys.exit(1) raise e
def button_release_event(self, widget, event): if _debug: print "FigureCanvasGTK.%s" % fn_name() x = event.x y = self.allocation.height - event.y FigureCanvasBase.button_release_event(self, x, y, event.button) return False # finish event propagation?
def __init__(self, figure): if _debug: print 'FigureCanvasGTK3.%s' % fn_name() FigureCanvasBase.__init__(self, figure) GObject.GObject.__init__(self) self._idle_draw_id = 0 self._need_redraw = True self._lastCursor = None self.connect('scroll_event', self.scroll_event) self.connect('button_press_event', self.button_press_event) self.connect('button_release_event', self.button_release_event) self.connect('configure_event', self.configure_event) self.connect('draw', self.on_draw_event) self.connect('key_press_event', self.key_press_event) self.connect('key_release_event', self.key_release_event) self.connect('motion_notify_event', self.motion_notify_event) self.connect('leave_notify_event', self.leave_notify_event) self.connect('enter_notify_event', self.enter_notify_event) self.set_events(self.__class__.event_mask) self.set_double_buffered(True) self.set_can_focus(True) self._renderer_init() self._idle_event_id = GObject.idle_add(self.idle_event)
def _update_pointer_position(self, guiEvent=None): """ Figure out if we are inside the canvas or not and update the canvas enter/leave events """ # if the pointer if over the canvas, set the lastx and lasty # attrs of the canvas so it can process event w/o mouse click # or move # the window's upper, left coords in screen coords xw = self._tkcanvas.winfo_rootx() yw = self._tkcanvas.winfo_rooty() # the pointer's location in screen coords xp, yp = self._tkcanvas.winfo_pointerxy() # not figure out the canvas coordinates of the pointer xc = xp - xw yc = yp - yw # flip top/bottom yc = self.figure.bbox.height - yc # JDH: this method was written originally to get the pointer # location to the backend lastx and lasty attrs so that events # like KeyEvent can be handled without mouse events. Eg, if # the cursor is already above the axes, then key presses like # 'g' should toggle the grid. In order for this to work in # backend_bases, the canvas needs to know _lastx and _lasty. # There are three ways to get this info the canvas: # # 1) set it explicity # # 2) call enter/leave events explicity. The downside of this # in the impl below is that enter could be repeatedly # triggered if thes mouse is over the axes and one is # resizing with the keyboard. This is not entirely bad, # because the mouse position relative to the canvas is # changing, but it may be surprising to get repeated entries # without leaves # # 3) process it as a motion notify event. This also has pros # and cons. The mouse is moving relative to the window, but # this may surpise an event handler writer who is getting # motion_notify_events even if the mouse has not moved # here are the three scenarios if 1: # just manually set it self._lastx, self._lasty = xc, yc elif 0: # alternate implementation: process it as a motion FigureCanvasBase.motion_notify_event(self, xc, yc, guiEvent) elif 0: # alternate implementation -- process enter/leave events # instead of motion/notify if self.figure.bbox.contains(xc, yc): self.enter_notify_event(guiEvent, xy=(xc,yc)) else: self.leave_notify_event(guiEvent)
def mouseReleaseEvent(self, event): x, y = self.mouseEventCoords(event) button = self.buttond.get(event.button()) if button is not None: FigureCanvasBase.button_release_event(self, x, y, button, guiEvent=event) if DEBUG: print('button released')
def scroll_event(self, widget, event): x, y = self._mouse_event_coords(event) step = 1 if event.direction == Gdk.ScrollDirection.UP else -1 FigureCanvasBase.scroll_event(self, x, y, step, guiEvent=event) return False # finish event propagation?
def key_release_event(self, widget, event): key = self._get_key(event) FigureCanvasBase.key_release_event(self, key, guiEvent=event) return True # stop event propagation
def enterEvent(self, event): FigureCanvasBase.enter_notify_event(self, event)
def get_width_height(self): w, h = FigureCanvasBase.get_width_height(self) return int(w / self._dpi_ratio), int(h / self._dpi_ratio)
def keyReleaseEvent(self, event): key = self._get_key(event) if key is not None: FigureCanvasBase.key_release_event(self, key, guiEvent=event)
def start_event_loop(self, timeout): FigureCanvasBase.start_event_loop_default(self, timeout)
def __init__(self, figure): FigureCanvasBase.__init__(self, figure) width, height = self.get_width_height() self.renderer = RendererMac(figure.dpi, width, height) _macosx.FigureCanvas.__init__(self, width, height)
def motion_notify_event(self, event): x = event.x # flipy so y=0 is bottom of canvas y = self.figure.bbox.height - event.y FigureCanvasBase.motion_notify_event(self, x, y, guiEvent=event)
def stop_event_loop(self): FigureCanvasBase.stop_event_loop_default(self)
def key_press(self, event): key = self._get_key(event) FigureCanvasBase.key_press_event(self, key, guiEvent=event)
def key_release(self, event): key = self._get_key(event) FigureCanvasBase.key_release_event(self, key, guiEvent=event)
def test_get_default_filename(tmpdir): plt.rcParams['savefig.directory'] = str(tmpdir) fig = plt.figure() canvas = FigureCanvasBase(fig) filename = canvas.get_default_filename() assert filename == 'image.png'
def scroll_event(self, event): x = event.x y = self.figure.bbox.height - event.y num = getattr(event, 'num', None) step = 1 if num == 4 else -1 if num == 5 else 0 FigureCanvasBase.scroll_event(self, x, y, step, guiEvent=event)
def enter_notify_event(self, widget, event): x, y, state = event.window.get_pointer() FigureCanvasBase.enter_notify_event(self, event, xy=(x, y))
def enter_notify_event(self, event): x = event.x # flipy so y=0 is bottom of canvas y = self.figure.bbox.height - event.y FigureCanvasBase.enter_notify_event(self, guiEvent=event, xy=(x, y))
def leave_notify_event(self, widget, event): FigureCanvasBase.leave_notify_event(self, event)
def key_release_event(self, widget, event): if _debug: print('FigureCanvasGTK.%s' % fn_name()) key = self._get_key(event) if _debug: print("release", key) FigureCanvasBase.key_release_event(self, key, guiEvent=event) return True # stop event propagation
def keyPressEvent(self, event): key = self._get_key(event) if key is not None: FigureCanvasBase.key_press_event(self, key, guiEvent=event)
def enter_notify_event(self, widget, event): x, y = self._mouse_event_coords(event) FigureCanvasBase.enter_notify_event(self, guiEvent=event, xy=(x, y))
def mouseMoveEvent(self, event): x, y = self.mouseEventCoords(event) FigureCanvasBase.motion_notify_event(self, x, y, guiEvent=event)
def motion_notify_event(self, widget, event): x, y = self._mouse_event_coords(event) FigureCanvasBase.motion_notify_event(self, x, y, guiEvent=event) return False # finish event propagation?
def enter_notify_event(self, widget, event): x = event.x # flipy so y=0 is bottom of canvas y = self.get_allocation().height - event.y FigureCanvasBase.enter_notify_event(self, guiEvent=event, xy=(x, y))
def leaveEvent(self, event): QtGui.QApplication.restoreOverrideCursor() FigureCanvasBase.leave_notify_event(self, event)
def key_press_event(self, widget, event): if _debug: print('FigureCanvasGTK.%s' % fn_name()) key = self._get_key(event) if _debug: print("hit", key) FigureCanvasBase.key_press_event(self, key, guiEvent=event) return False # finish event propagation?
def keyReleaseEvent(self, event): key = self._get_key(event) if key is None: return FigureCanvasBase.key_release_event(self, key) if DEBUG: print 'key release', key
def keyPressEvent(self, event): key = self._get_key(event) if key is None: return FigureCanvasBase.key_press_event(self, key) if DEBUG: print('key press', key)
def __init__(self, *args): FigureCanvasBase.__init__(self, *args)
def mouseMoveEvent(self, event): x = event.x() # flipy so y=0 is bottom of canvas y = self.figure.bbox.height - event.y() FigureCanvasBase.motion_notify_event(self, x, y)
def __init__(self, figure): FigureCanvasBase.__init__(self, figure) width, height = self.get_width_height() _macosx.FigureCanvas.__init__(self, width, height) self._device_scale = 1.0