Я разрабатываю приложение в стиле текстового редактора с использованием Python2.7 и Gtk3, и я не очень уверен, как настроить обработчик, чтобы проверить, находится ли основной TextView в данный момент в фокусе, поэтому я могу отключить элементы меню (например, Правка -> Копировать и т. д.) соответственно.
Чтобы создать текстовый редактор с вкладками, я использую Gtk.Notebook в качестве основного тела, и каждый раз, когда активируется File -> New, я создаю новое ScrolledWindow и TextView для создания новой вкладки в текстовом редакторе:
def on_imagemenuitemNew_activate(self, *args):
editor = Gtk.ScrolledWindow()
editor.add(Gtk.TextView())
editor.set_shadow_type(Gtk.ShadowType.IN)
editor.show_all()
#The instance of Gtk.Notebook is passed to the handler as user data in args[0]
args[0].append_page(editor, Gtk.Label('untitled'))
Это отлично работает, но если я попытаюсь использовать:
editor.connect('focus-in-event', self.on_editor_focus_in_event)
внутри блока он никогда не регистрируется моим обработчиком:
def on_editor_focus_in_event(self, *args):
print 'Focused!'
Я подозреваю, что проблема может быть связана с тем, что каждый экземпляр editor
кажется идентичным, но это действительно ставит меня в тупик. Простите за корявый код, я только вчера начал изучать GTK, а Pygobject/Gtk3 не очень хорошо документирован.