Изменить курсор при наведении курсора мыши на виджет (PyGObject)

#cursor #gtk #pygtk

#курсор #gtk #pygtk

Вопрос:

Я пытался изменить курсор в Gtk.ScrolledWindow () (в нем есть виджет с изображением) наведение курсора мыши:

 import gi
gi.require_version('Gtk', '3.0')
from gi.repository import Gtk, Gdk, GdkPixbuf

class MainWindow(Gtk.Window):

  def __init__(self):
    Gtk.Window.__init__(self, title = "Test")

    self.maximize()

    grid = Gtk.Grid()
    self.add(grid)

    scrolled = Gtk.ScrolledWindow()
    scrolled.set_hexpand(True)
    scrolled.set_vexpand(True)
    scrolled.connect("motion-notify-event", self.mousemove)
    grid.add(scrolled)

    pixbuf = GdkPixbuf.Pixbuf.new_from_file("anyimage.jpg")
    image = Gtk.Image.new_from_pixbuf(pixbuf)
    scrolled.add(image)

  def mousemove(self, widget, event):
    print("Mouseover triggered")
    circle = Gdk.Cursor(Gdk.CursorType.CIRCLE)
    widget.get_window().set_cursor(circle)

win = MainWindow()
win.connect("destroy", Gtk.main_quit)
win.show_all()
  

Событие запускается, но вместо круга курсор отображается в виде стрелки с символом «отключено» в качестве нижнего индекса.

Я что-то здесь упускаю?

Комментарии:

1. У меня это работает.

2. Тогда это может быть ошибка с PyGObject (я на Arch Linux с PyGObject 3.32). Другие курсоры (например, Gdk.CursorType.CROSS) работают должным образом.

3. Извините, я должен был прочитать ваш вопрос немного внимательнее. У меня это не работает, я получаю тот же символ «недоступно», прикрепленный к моему курсору по умолчанию. Затем я попробовал некоторые другие, такие как Gdk.CursorType.CLOCK, и они работают.

4. Нет проблем, это незначительная проблема, но, тем не менее, я сообщу об этом в службу отслеживания проблем. Спасибо за подтверждение.

Ответ №1:

Я был неправ, это не ошибка. Это полностью зависит от используемой темы курсора. Мне рекомендовали придерживаться курсоров, перечисленных по имени здесь:

https://developer.gnome.org/gdk3/3.24/gdk3-Cursors.html#gdk-cursor-new-from-name

Они соответствуют CSS и, скорее всего, будут доступны в темах курсора.