Содержимое обычного буфера обмена ctrl-C ctrl-V в Gtk 3 в приложении Python 3 легко установить с помощью чего-то вроде
буфер обмена = Gtk.Clipboard.get(Gdk.SELECTION_CLIPBOARD)
clipboard.set_text("Сработало!, -1)
Также легко отслеживать изменения в буфере обмена с помощью объекта Clipboard. смена владельца
сигнал.
Тем не менее, я хотел бы игнорировать смена владельца
в моем приложении, если это было мой приложение, которое установлен содержимое буфера обмена, и я не знаю, как это сделать. смена владельца
сигнал проходит через владелец
параметр, который указывает на Gdk.Window
, но я никогда явно не создаю окно в своем приложении; Я предполагаю, что Gtk незаметно создает его для меня, потому что должно быть какое-то X-окно, чтобы владеть содержимым буфера обмена. Я могу получить идентификатор этого окна X, когда владелец буфера обмена меняется примерно так:
def clipboardChanged (буфер обмена, owner_change):
print("Новый владелец", owner_change.owner.get_xid())
clipboard.connect('смена владельца', clipboardChanged)
Это новое окно владельца, очевидно, принадлежит моему приложению, но как мне заранее найти его xid? То есть: как я могу отличить от смена владельца
сигнализируют о том, что новый владелец меня?
(Примечание: если я дважды устанавливаю содержимое буфера обмена, я получаю два смена владельца
сигналы и owner_change.причина
является НОВЫЙ ВЛАДЕЛЕЦ
каждый раз, так что это ненадежно: в частности, НОВЫЙ ВЛАДЕЛЕЦ
также отправляется за "тот же владелец установил его снова", а не только за "а разные владелец теперь владеет буфером обмена».)