我正在使用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没有很好的记录。
答案 0 :(得分:1)
我只能猜测,但文档说“要接收此信号,与窗口小部件关联的GdkWindow需要启用GDK_FOCUS_CHANGE_MASK
掩码”。
您确定已启用它吗?
答案 1 :(得分:1)
在您的代码中,editor
是Gtk.ScrolledWindow
。我不认为ScrolledWindow
可以成为焦点。尝试连接到TextView
的焦点事件,确保启用@TinaBrooks指出的正确掩码。