Не удается получить xid виджета GtkDrawingArea

Я пытаюсь создать приложение с графическим интерфейсом, используя python-vlc и Gtk в Python 3.6. Но когда я пытаюсь получить доступ к xid моего виджета GtkDrawingArea (чтобы связать его с экраном моего плеера), я получаю сообщение об ошибке

AttributeError: объект "GdkWaylandWindow" не имеет атрибута "get_xid"

Вот часть кода, где я пытаюсь получить xid виджета GtkDrawingArea:

def vlc_realize_handler(self, widget, data=None):
    self.win_id = widget.get_property('window').get_xid()
    self.player.set_xwindow(self.win_id)

Итак, как мне привязать свой плеер к этому виджету?

PS - Я использую Ubuntu 17.10 в качестве операционной системы, которая по умолчанию использует оболочку Gnome.


person Divyansh Jamuaar    schedule 09.11.2017    source источник
comment
Он называется xid, потому что относится к идентификатору окна в системе X Window. Wayland — это не система X Window, поэтому в ваших окнах нет xids.   -  person Aran-Fey    schedule 09.11.2017
comment
На значке шестеренки входа выберите Ubuntu на Xorg. Если вы хотите попробовать Wayland, поищите Gstreamer Wayland Sinks.   -  person José Fonte    schedule 09.11.2017
comment
Как ни странно, я поддерживаю старое приложение, которое использует PyGTK2 и self.player.set_xwindow(self.window.xid) работает:\   -  person Phoenix87    schedule 21.11.2017


Ответы (1)


Я думаю, это связано с тем, что приложения Gtk+ 3.0 по умолчанию будут запускаться напрямую через Wayland. Чтобы заставить приложение пройти через XWayland (клиент X через Wayland), запустите приложение с

GDK_BACKEND=x11 your-app

Думаю, именно столько приложений X11 можно использовать на Wayland .

person Phoenix87    schedule 21.11.2017
comment
Благодарю вас! Это помогло :) - person Divyansh Jamuaar; 19.01.2018