"Abbrechen"-Knopf soll andere kill-focus-Methoden unterbinde

Plattformunabhängige GUIs mit wxWidgets.
Antworten
Benutzeravatar
Humbalan
User
Beiträge: 59
Registriert: Mittwoch 2. September 2009, 15:11

Donnerstag 30. Juli 2015, 08:08

Hallo Leute,

Ich habe eine wx-Anwendung, in der die Gültigkeit von Eingaben in Feldern beim Kill-Focus validiert wird und bei einem Fehler dieses Feld wieder den Fokus erhält. Damit kann der User nicht "aus diesem Feld heraus", wenn es nicht korrekt ausgefüllt ist. Problem: Auch beim Klick auf den Abbrechen-Knopf sagt die Kill-Focus-Methode "halt, da is noch'n Fehler" und das Abbrechen geht erst dann, wenn das Feld korrekt ausgefüllt ist. Das ist nun nicht im Sinne des Abbrechen-Knopfs. Ich habe mit event.GetWindow() versucht, das Ziel-Window des Events zu bestimmen, liefert aber immer None :K .

Ich möchte also irgendwie erreichen, dass die Validierung der Feldinhalte unterbunden wird, wenn ich den Abbrechen-Knopf klicke. Kann jemand helfen?

Ich arbeite mit Win7 SP1, Python 2.7.4, wxPython 2.8.12.1

Beste Grüße
Humbalan
Piet Lotus
User
Beiträge: 80
Registriert: Dienstag 14. November 2006, 10:40

Mittwoch 5. August 2015, 20:42

Hallo Humbalan,
hast du ein lauffähiges Minimalbeispiel?
Wenn ich richtig vermute, schreibst du den Handler für das Event zu wx.EVT_KILL_FOCUS selbst. Und dieser wird vor dem Event des Abbrechen-Knopfs durchgeführt? Also erst wird das KILL-Event verarbeitet und dann das Abbrechen-Event. Im Kill-Event-Handler passiert wahrscheinlich deine Feldvalidierung, die dafür sorgt, dass du nicht aus dem Feld kommst, auch wenn du "Abbrechen" drückst. Wenn meine Annahmen stimmen, dann müsstest du in deiner Kill-Event-Methode unterscheiden, wer den Event ausgelöst hat? Vielleicht reicht es schon mittels wx.Window_FindFocus() herauszufinden, welches Widget den Fokus aktuell hat, also welches gerade ausgewählt ist. Sinngemäß müsstest du mit wx.Window_FindFocus() auf den "Abbrechen-Button" in deiner Kill-Event-Methode prüfen und deine Validierung zum Kill-Event nur durchführen lassen, wenn der Fokus nicht auf dem Abbrechen-Knopf liegt.
Vielleicht hilft das ja?
Viele Grüße
Piet Lotus
P.S. Ob das Vorgehen zu deiner Systemkonfigration passt. weiß ich jetzt allerdings nicht.
Benutzeravatar
Humbalan
User
Beiträge: 59
Registriert: Mittwoch 2. September 2009, 15:11

Donnerstag 6. August 2015, 06:36

Guten Morgen Piet Lotus,

danke für die Antwort.

Deine Annahmen über die Situation sind alle richtig. Die vorgeschlagene FindFocus()-Lösung hat ins Schwarze getroffen. Herzlichen Dank für die Hilfe.

Beste Grüße
Humbalan
Antworten