为什么第一个工具栏按钮自动选择时,我的GTK应用程序加载?

StackOverflow https://stackoverflow.com/questions/894876

  •  23-08-2019
  •  | 
  •  

当我的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([]))

您可以随时添加一个小部件,使其不可见,并转移焦点到它。虽然我真的不觉得这是一个问题,或者知道还有谁做的。

据焦点,因为它是在你的应用程序中的第一个部件。如果您使用的空地,你可以设置“有重点”,以“是”任何其他配件和工具栏将自动失去专注于启动。

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top