Warum löst das Drücken der Rückgängertaste in meinem GTK.Entry keinen Tastendresswert aus?

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

  •  18-09-2019
  •  | 
  •  

Frage

Ich habe einen solchen Code:

    ...

    entry.KeyPressEvent += EntryKeyPressEvent;

    ...
}

void EntryKeyPressEvent(object o, KeyPressEventArgs args)
{
    Console.WriteLine("DEBUG: KeyValue: " + args.Event.KeyValue);
    ...
}

EntryKeypressEvent wird aufgerufen, wenn die meisten Tasten gedrückt werden, jedoch nicht die Rückgabetaste. Warum ist das?

Bearbeiten: Es wird eigentlich nicht aufgerufen, wenn die meisten Schlüssel gedrückt werden. Einige nennen es (zB Uparrow, Downarrow, Flucht), aber die meisten nicht (zB irgendeiner Buchstabenschlüssel, zurück).

Als Referenz versuche ich, den PyGTK -Code zu portieren, der so aussieht:

    ...

    entry.connect('key_press_event', self.entry_key_pressed)

    ...

def entry_key_pressed(self, widget, event):
    ...
War es hilfreich?

Lösung

Ich konnte es herausfinden Dieser Mailinglisten -Thread. Alles was ich tun musste, war auf die zu beantragen ConnectBefore Attribut auf die Handler -Methode:

[ConnectBefore]
void EntryKeyPressEvent(object o, KeyPressEventArgs args)
{
    Console.WriteLine("DEBUG: KeyValue: " + args.Event.KeyValue);
    ...
}

Andere Tipps

Von dem Pygtk FAQ:

Tastaturereignisse werden unterschiedlich behandelt. Wenn Ihr Fenster ein Tastaturereignis erhält, wird es zuerst in das Toplevel -Fenster versandt, wodurch er überprüft wird, ob es zu allen Tastaturverknüpfungen übereinstimmt. Wenn die Taste nicht mit einer Verknüpfung übereinstimmt, wird das Ereignis an das untergeordnete Widget geschickt, das derzeit den Schwerpunkt hat.

Kurz gesagt: Ihr gtk.entry sieht das Schlüsselpress-Event-Signal nicht, da das Fenster oberster Ebene etwas damit tut (nämlich das derzeit ausgewählte Widget).

Ein Meta-Answer: Oft ist es überraschend hilfreich, die GTK-Dokumente anderer Sprachen zu durchsuchen.

Versuchen Sie, die Eingabe zu validieren? Das Focus-out-Event feuert als Focus das Einstiegsfeld-wie wenn der Benutzer eintritt.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top