Perché il primo pulsante di barra selezionato automaticamente quando i miei carichi applicazione GTK?

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

  •  23-08-2019
  •  | 
  •  

Domanda

Quando i miei carichi applicazione GTK, il primo elemento sulla barra degli strumenti viene selezionato automaticamente (è evidenziato, viene premuto quando ha colpito entrare). Questo è solo un problema minore, ma preferirei per niente di essere selezionati per impostazione predefinita.

Ecco alcuni esempi di codice di 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>
È stato utile?

Soluzione

Questo è probabilmente solo GTK + consegnando la messa a fuoco per un po 'di widget, le piace un widget si sono concentrati, se possibile.

È possibile utilizzare grab_focus() per spostare l'attenzione altrove, per ottenere il comportamento desiderato. Se la barra degli strumenti è tanto widgetry si dispone, potrebbe essere difficile trovare un focus adeguato "target", però.

Altri suggerimenti

gtk.ToolButton eredita gtk.Bin.

  

gtk.Bin è una classe base astratta che definisce un widget che è un contenitore con un solo bambino .

Quindi, il pulsante è un contenitore e

btn.set_can_focus(False)

non funzionerà. È necessario

btn.set_focus_chain([])

o per ogni pulsante nella barra degli strumenti

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

È sempre possibile aggiungere un widget e renderlo invisibile, e trasferire attenzione ad esso. Anche se non mi trovo che questo sia un problema o sa di chiunque altro che ha fatto.

E 'concentrarsi, perché è il primo widget nella tua app. Se si utilizza radura, è possibile impostare "Has focus" su 'Sì' a qualsiasi altro widget e la barra degli strumenti verrà automaticamente perdere la concentrazione sulla partenza.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top