1

当我的 gtk 应用程序加载时,工具栏上的第一个项目被自动选择(它被突出显示,当它按 enter 时被按下)。这只是一个小问题,但我希望默认情况下不选择任何内容。

这是一些基本的示例代码:

import gtk
import gtk.glade

window_tree = gtk.glade.XML('testtoolbar.glade')

gtk.main()

测试工具栏.glade

<?xml version="1.0"?>
<glade-interface>
  <!-- interface-requires gtk+ 2.16 -->
  <!-- interface-naming-policy project-wide -->
  <widget class="GtkWindow" id="window1">
    <property name="width_request">200</property>
    <property name="visible">True</property>
    <child>
      <widget class="GtkToolbar" id="toolbar1">
        <property name="visible">True</property>
        <child>
          <widget class="GtkToolButton" id="toolbutton1">
            <property name="visible">True</property>
            <property name="label" translatable="yes">toolbutton1</property>
            <property name="use_underline">True</property>
            <property name="stock_id">gtk-new</property>
          </widget>
          <packing>
            <property name="expand">False</property>
            <property name="homogeneous">True</property>
          </packing>
        </child>
        <child>
          <widget class="GtkToolButton" id="toolbutton2">
            <property name="visible">True</property>
            <property name="label" translatable="yes">toolbutton2</property>
            <property name="use_underline">True</property>
            <property name="stock_id">gtk-open</property>
          </widget>
          <packing>
            <property name="expand">False</property>
            <property name="homogeneous">True</property>
          </packing>
        </child>
      </widget>
    </child>
  </widget>
</glade-interface>
4

4 回答 4

3

这可能只是 GTK+ 将焦点交给了某个小部件,如果可能的话,它喜欢让一个小部件获得焦点。

您可以使用grab_focus()将焦点移至其他位置,以获得所需的行为。但是,如果工具栏是您拥有的所有小部件,则可能很难找到合适的焦点“目标”。

于 2009-05-22T08:21:50.350 回答
2

gtk.ToolButton 继承 gtk.Bin。

gtk.Bin 是一个抽象基类,它定义了一个小部件,它是一个只有一个子容器的容器。

所以按钮是一个容器

btn.set_can_focus(False)

不管用。你需要

btn.set_focus_chain([])

或工具栏中的每个按钮

toolbar.foreach(lambda x: x.set_focus_chain([]))
于 2013-05-17T09:08:17.930 回答
1

您始终可以添加一个小部件并使其不可见,并将焦点转移到它。尽管我真的不认为这是一个问题,也不知道其他人这样做过。

于 2009-06-13T02:19:27.257 回答
0

它具有焦点,因为它是您应用程序中的第一个小部件。如果您使用 glade,您可以将“有焦点”设置为任何其他小部件的“是”,工具栏将在启动时自动失去焦点。

于 2011-12-08T13:27:25.600 回答