Вот как я заставил свой Iconview отреагировать на позицию указателя, чтобы получить эффект зависания и один щелчок левой кнопкой мыши и щелчок правой кнопкой мыши.
Вы должны активировать указатель-motion-notify для виджета, а затем конвертировать x, y позицию указателя в путь к iconview:
...
self.iconview.add_events(Gdk.EventMask.POINTER_MOTION_MASK)
self.iconview.connect("item-activated", self.iv_icon_activated)
self.iconview.connect("button-press-event", self.on_mouse_click)
self.iconview.connect("motion-notify-event", self.on_pointer_motion)
def on_pointer_motion(self, widget, event):
path= self.iconview.get_path_at_pos(event.x, event.y)
if path !=None:
self.iconview.select_path(path)
#If we're outside of an item, deselect all items (turn off highlighting)
if path == None:
self.iconview.unselect_all()
def on_mouse_click(self,widget, event):
if event.type == Gdk.EventType.BUTTON_PRESS:
path=self.iconview.get_selected_items()[0]
#if right click activate a pop-up menu
if event.button == 3 and path != None:
self.popup.popup(None, None, None, None, event.button, event.time)
#if left click, activate the item to execute
if event.button == 1 and path != None:
self.iv_icon_activated(widget, path)