2009-05-21 6 views
1

Lorsque mon application GTK se charge, le premier élément de la barre d'outils est automatiquement sélectionné (il est en surbrillance, il est pressé quand il appuie sur Entrée). C'est juste un problème mineur, mais je préférerais que rien ne soit sélectionné par défaut.Pourquoi le premier bouton de la barre d'outils est-il automatiquement sélectionné lors du chargement de mon application gtk?

Voici quelques exemples de code de base:

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> 

Répondre

3

Ceci est probablement juste GTK + remettre le focus à certains widgets, il aime avoir un widget concentré si possible.

Vous pouvez utiliser grab_focus() pour déplacer le focus ailleurs pour obtenir le comportement souhaité. Si la barre d'outils contient tous les objets que vous avez, il peut être difficile de trouver une cible appropriée.

1

Vous pouvez toujours ajouter un widget et le rendre invisible, et y transférer le focus. Bien que je ne trouve pas vraiment que ce soit un problème ou savoir de quelqu'un d'autre qui a fait.

0

Il a l'accent parce que c'est le 1er widget dans votre application. Si vous utilisez glade, vous pouvez définir "Has focus" sur "Yes" pour tout autre widget et la barre d'outils perdra automatiquement le focus au démarrage.

2

gtk.ToolButton hérite de gtk.Bin.

gtk.Bin est une classe de base abstraite définissant un widget qui est un conteneur avec juste un enfant.

donc bouton est un conteneur et

btn.set_can_focus(False) 

ne fonctionnera pas. Vous avez besoin

btn.set_focus_chain([]) 

ou pour chaque bouton dans la barre d'outils

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