¿Por qué es el primer botón de la barra seleccionada automáticamente cuando mis cargas aplicación GTK?

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

  •  23-08-2019
  •  | 
  •  

Pregunta

Cuando mis cargas de aplicaciones GTK, el primer elemento de la barra de herramientas se selecciona automáticamente (se destaca, que se pulsa cuando se pulsa enter). Esto es sólo un problema menor, pero yo preferiría para nada que este seleccionado por defecto.

Aquí hay algunos ejemplos de código básica:

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>
¿Fue útil?

Solución

Esto es probablemente sólo GTK + entregar el foco de algunos widgets, que le gusta tener un widget centrado si es posible.

Puede utilizar grab_focus() para mover el foco en otro lugar, para obtener el comportamiento deseado. Si la barra de herramientas es toda la widgetry que tiene, podría ser difícil encontrar un enfoque "objetivo" adecuado, sin embargo.

Otros consejos

gtk.ToolButton hereda gtk.Bin.

  

gtk.Bin es una clase base abstracta que define un widget que es un contenedor con un solo hijo .

Así botón es un contenedor y

btn.set_can_focus(False)

no funcionará. Es necesario

btn.set_focus_chain([])

o para cada botón en la barra de herramientas

toolbar.foreach(lambda x: x.set_focus_chain([]))

Siempre se puede añadir un widget y hacerlo invisible, y transferir el foco a la misma. Aunque realmente no parece que este es un problema o sabe de cualquier otra persona que lo hizo.

Se ha centrará porque es el primero de widget en su aplicación. Si utiliza el claro, se puede establecer "tiene el foco" a 'Sí' a cualquier otro widget y la barra de herramientas perderá automáticamente el enfoque en el arranque.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top