Как я упоминал в названии, у меня есть две программы: во-первых, это создает GtkWindow, GtkDrawingArea и возвращает XID окна GtkDrawingArea. Второй получает XID и выполняет некоторые операции над ним (изменение размера, drawing..etc). Изменение размера работает, но если я рисую, я ничего не вижу на моей GtkDrawingArea (это все еще ясно). Как кажется, проблема в конфигурации GtkDrawingArea (для рисования), XID прав. Вот пример кода, который я использую, чтобы проверить: Рисование в GtkDrawingArea другим приложением
#!/usr/bin/python3
from gi.repository import Gtk, Gdk, GdkX11
WIDTH = 800
HEIGHT = 600
drawing_area = Gtk.DrawingArea()
drawing_area.set_size_request(WIDTH, HEIGHT)
drawing_area.add_events(Gdk.EventMask.ALL_EVENTS_MASK)
drawing_area.set_double_buffered(False)
drawing_area.realize()
window = Gtk.Window()
window.add(drawing_area)
window.connect('delete-event', Gtk.main_quit)
window.show_all()
# Just for sure
drawing_area.get_window().resize(WIDTH, HEIGHT)
xid = drawing_area.get_window().get_xid()
print('APP_XID=%s' % xid)
Gtk.main()
Я не думаю, что вы можете это сделать. Вместо этого используйте 'Gtk.Socket' и' Gtk.Plug' (к сожалению, только X11, но если вы используете XID, то это X11 только для начала.) – ptomato
@ptomato Хорошо, но возможно ли создать Gtk.Socket в первом приложении, и рисовать на нем во втором, не создавая Gtk.Plug? (Я пытался создать XWindow из идентификатора Socket, но тогда я могу только изменить геометрию окна - ничего не нарисовано. – poxip
№ 'Gtk.Socket' и' Gtk.Plug' должны быть спарены. – ptomato