Jak połączyć się z sygnałem GObject w Pythonie, bez utrzymywania odniesienia do łącznika?

Problem polega zasadniczo na tym, że w gobjectach pythona i powiązaniach gtk. Załóżmy, że mamy klasę, która wiąże się z sygnałem po skonstruowaniu:

class ClipboardMonitor (object):
  def __init__(self):
    clip = gtk.clipboard_get(gtk.gdk.SELECTION_CLIPBOARD)
    clip.connect("owner-change", self._clipboard_changed)

Problem polega na tym, żeżadna instancja ClipboardMonitor nigdy nie umrze. Schowek gtk jest obiektem obejmującym całą aplikację, a połączenie z nim powoduje odwołanie do obiektu, ponieważ używamy wywołania zwrotnegoself._clipboard_changed.

Zastanawiam się, jak to obejść, używając słabych referencji (moduł weakref), ale muszę jeszcze opracować plan. Każdy ma pomysł, jak przekazać wywołanie zwrotne do rejestracji sygnału i czy zachowuje się jak słaba referencja (jeśli wywołanie zwrotne sygnału jest wywoływane, gdy instancja ClipboardMonitor jest poza zakresem, powinna to być operacja bezoperacyjna).

Dodanie:Zwrot niezależnie od GObject lub GTK +:

Jak udostępnić metodę wywołania zwrotnego nieprzezroczystemu obiektowi z semantyką słabych wartości? Jeśli łączący się obiekt wykracza poza zakres, powinien zostać usunięty, a wywołanie zwrotne powinno działać jako operacja zerowa; łącznik nie powinien zawierać odniesienia do złącza.

Aby wyjaśnić: wyraźnie chcę uniknąć wywoływania metody „destruktor / finalizator”

questionAnswers(3)

yourAnswerToTheQuestion