0

我正在使用 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 的文档也不是很好。

4

2 回答 2

1

我只能猜测,但文档说“要接收此信号,与小部件关联的 GdkWindow 需要启用GDK_FOCUS_CHANGE_MASK掩码”。

你确定你启用了吗?

于 2012-08-22T21:12:03.260 回答
1

在您的代码中,editor是一个Gtk.ScrolledWindow. 我不认为ScrolledWindows可以有焦点。尝试连接到你的焦点事件TextView,确保启用正确的掩码,正如@TinaBrooks 指出的那样。

于 2012-08-22T22:10:14.293 回答