为什么第一个工具栏按钮自动选择时,我的GTK应用程序加载?
题
当我的GTK的应用程序加载的工具栏上的第一项被自动选择(它被突出显示,当它击中进入它被按下)。这只是一个小问题,但我宁愿白白被默认选中。
下面是一些基本的示例代码:
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>
解决方案
这是可能只是GTK +交给焦点一些插件,它喜欢有一个小窗口聚焦如果可能的话。
您可以使用grab_focus()
移到别处重点,以获得所需的行为。如果工具栏是你有widgetry,可能很难找到一个合适的重点“目标”,虽然。
其他提示
gtk.ToolButton继承gtk.Bin。
gtk.Bin是一个抽象基类定义一个小部件,是只用一个孩子的容器强>
所以按钮是一个容器和
btn.set_can_focus(False)
将不起作用。 您需要
btn.set_focus_chain([])
或用于工具栏每个按钮
toolbar.foreach(lambda x: x.set_focus_chain([]))
您可以随时添加一个小部件,使其不可见,并转移焦点到它。虽然我真的不觉得这是一个问题,或者知道还有谁做的。
据焦点,因为它是在你的应用程序中的第一个部件。如果您使用的空地,你可以设置“有重点”,以“是”任何其他配件和工具栏将自动失去专注于启动。
不隶属于 StackOverflow