当我的gtk应用程序加载时,工具栏上的第一个项目会自动被选中(它会突出显示,当它按下Enter键时会被按下)。这只是一个小问题,但我希望默认情况下不会选择任何内容。
以下是一些基本的示例代码:
import gtk
import gtk.glade
window_tree = gtk.glade.XML('testtoolbar.glade')
gtk.main()
testtoolbar.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>
答案 0 :(得分:3)
这可能只是GTK +将焦点交给某个小部件,它喜欢在可能的情况下重点关注小部件。
您可以使用grab_focus()
将焦点移到其他位置,以获得所需的行为。如果工具栏是您拥有的所有小工具,则可能很难找到合适的焦点“目标”。
答案 1 :(得分:2)
gtk.ToolButton继承了gtk.Bin。
gtk.Bin是一个抽象基类,用于定义一个小部件,它是一个只有一个子的容器。
所以按钮是一个容器,
btn.set_can_focus(False)
不起作用。 你需要
btn.set_focus_chain([])
或工具栏中的每个按钮
toolbar.foreach(lambda x: x.set_focus_chain([]))
答案 2 :(得分:1)
您始终可以添加窗口小部件并使其不可见,并将焦点转移到该窗口小部件。虽然我并不认为这是一个问题,也不知道其他人是谁。
答案 3 :(得分:0)
它具有焦点,因为它是您应用中的第一个小部件。如果您使用glade,则可以将“Has focus”设置为“Yes”到任何其他窗口小部件,工具栏将自动失去对启动的关注。