В моем случае я пытался отличить пользователя, изменяющего размер Gtk.Paned, от пользователя, изменяющего размер всего окна. Оба излучали сигнал notify::position
.
Мое решение было, так как я не могу знать, изменяет ли пользователь размер окна из виджета, полностью изменить то, что я хотел знать. Запишите, если пользователь переместил виджет, и игнорируйте обновления, если пользователь не инициировал их в моем виджете.
То есть, вместо того, чтобы проверять "изменено ли окно", я записал локально button-press-event
и button-release-event
, чтобы я мог вместо этого проверить, "если виджет перемещен"
from gi.repository import Gtk
class MyPaned(Gtk.Paned):
_user_activated = False
def on_position(self, _, gparamspec):
if self._user_activated:
# widget touched
else:
# window resized (probably)
def on_button_press(self, *_):
self._user_activated = True
def on_button_release(self, *_):
self._user_activated = False
dev __init__(self, *args):
super(MyPaned, self).__init__(*args)
self.connect('notify::position', self.on_position)
self.connect('button-press-event', self.on_button_press)
self.connect('button-release-event', self.on_button_release)
Эффективно по записи, когда пользователь начинал и заканчивал взаимодействовать с моим виджетом напрямую, я мог предположить, что остальное время было связано с изменением размера окна. (Пока не найду больше дел)