【问题标题】:Python2/Pygobject/Gtk3/Glade3 check TextView focusPython2/Pygobject/Gtk3/Glade3 检查TextView焦点
【发布时间】:2012-08-22 18:48:15
【问题描述】:

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

【问题讨论】:

标签: python gtk glade gtk3 pygobject


【解决方案1】:

在您的代码中,editorGtk.ScrolledWindow。我认为ScrolledWindows 不能成为焦点。尝试连接到 TextView 的焦点事件,确保启用正确的掩码,正如 @TinaBrooks 指出的那样。

【讨论】:

  • 成功了!谢谢!有了这个,它似乎也可以在没有面具的情况下工作。我只需要这样做:editor.get_child().connect('focus-in-event', self.on_editor_focus_in_event)
【解决方案2】:

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

您确定已启用它吗?

【讨论】:

  • 在 PyGObject 中,那个特定的枚举是 Gdk.EventMask.FOCUS_CHANGE_MASK 此外,即使使用该掩码集,它也不起作用。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-08-24
  • 2012-05-03
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多