Seite 1 von 1
Wizard -> gleiche Seite nochmal anzeigen
Verfasst: Sonntag 22. Oktober 2006, 16:27
von Shana
Hallo
folgendes Problem, ich habe einen Wizard, in dem Formulardaten eingegeben werden. Wenn der Benutzer nun auf den Weiter-Button drückt, dann werden die Daten überprüft und bei einer Falschangabe wird eine Fehlermeldung gegeben. Doch der Wizard geht trotzdem eine Seite weiter, obwohl ich es gern so hätte, dass dann die aktuelle Seite angezeigt bleibt bzw der Wizard sich auf die Seite "zurückblättert".
Dazu ist zu sagen, dass ich einen SimpleWizard benutze.
Wäre nett, wenn ihr vielleicht Ideen dafür hättet. Danke schonmal im Vorraus.
Gruß,
Shana
Verfasst: Sonntag 22. Oktober 2006, 17:04
von Crush
hi Shana
ich habe das zwar jetzt nicht nachgemacht, aber möglicherweise hilft dir der Event "EVT_WIZARD_PAGE_CHANGING". In "wxPython in Action" steht dazu:
"Fired when the user has requested a page change, but it has not yet occurred. This event may be vetoed."
vielleicht kannst du auch deinen Wizard (oder Teile davon) posten, damit man das einfacher nachvollziehen kann bzw. nicht seperat nachbauen muss.
Crush
Verfasst: Sonntag 22. Oktober 2006, 17:14
von Shana
Danke für die Antwort!
Mit EVT_WIZARD_PAGE_CHANGING habe ich das schon probiert, doch nachdem die Fehlermeldung erschienen ist, wechselt die Seite sofort.
Hier mal der Code:
Code: Alles auswählen
def onPageChanging(self, event):
# Seitenzahlen hoch oder runter zählen, dient zur späteren Überprüfung
if event.GetDirection():
self.nummer += 1
print self.nummer
else:
self.nummer -= 1
print self.nummer
if event.GetDirection() and self.nummer == 3:
# wenn weiter gedrückt wurde und Seitenzahl 3 ist
if self.pruefePlatznummer(self.page2.platznummer.GetValue()):
self.platznummer = self.page2.platznummer.GetValue()
print 'Geklappt!'
# wenn nicht True, dann soll der Wizard nocheinmal die gleiche Seite anzeigen
def pruefePlatznummer(self, num):
if num in self.platzliste:
error = wx.MessageDialog(self, 'Die eingegebene Platznummer ist bereits vorhanden!\nBitte eine andere vergeben.',
'Platznummer bereits vergeben', style = wx.OK | wx.ICON_ERROR )
error.ShowModal()
error.Destroy()
return False
return True
Re: Wizard -> gleiche Seite nochmal anzeigen
Verfasst: Sonntag 22. Oktober 2006, 17:23
von Francesco
Shana hat geschrieben:Hallo
folgendes Problem, ich habe einen Wizard, in dem Formulardaten eingegeben werden. Wenn der Benutzer nun auf den Weiter-Button drückt, dann werden die Daten überprüft und bei einer Falschangabe wird eine Fehlermeldung gegeben. Doch der Wizard geht trotzdem eine Seite weiter, obwohl ich es gern so hätte, dass dann die aktuelle Seite angezeigt bleibt bzw der Wizard sich auf die Seite "zurückblättert".
Dazu ist zu sagen, dass ich einen SimpleWizard benutze.
Wäre nett, wenn ihr vielleicht Ideen dafür hättet. Danke schonmal im Vorraus.
Gruß,
Shana
Hallo Shana,
Hm, nur ein Gedanke.
Man kann ja den Next Button so lange disablen, bis eine Überprüfung
der Daten ok ist. Bei jedem Event einer Eingabe wird die Prüfung
durchgeführt und je nachdem der Next Button enabled or disabled.
Vielleicht hat ja wer nach eine andere Idee.

Verfasst: Sonntag 22. Oktober 2006, 17:27
von Shana
Daran hatte ich auch schon gedacht, aber das wäre in meinem Fall keine so gute Idee. Das würde ja heißen, dass entweder noch ein anderer Button auf der Seite da wäre oder mit einem anderen Event die Eingabe abwarten müsste. Fände ich eher unvorteilhaft.
Mit SetNextPage() habe ich es auch schon versucht, das klappt allerdings auch nicht.
Verfasst: Sonntag 22. Oktober 2006, 17:41
von Crush
Shana: versuch doch mal, diese Zeile in die __init__-Funktion zu schreiben:
Code: Alles auswählen
self.Bind(wx.wizard.EVT_WIZARD_PAGE_CHANGING, self.page_changing)
danach noch eine Funktion page_changing die z.B. so aussieht:
Code: Alles auswählen
def page_changing(self, evt):
print 'die seite wird wegen dem "evt.Veto()" nicht gewechselt!'
evt.Veto()
bei mir hat das so geklappt, die Seite wird nicht gewechselt.

Ich hoffe, das funktioniert auch bei dir.
Gruss Crush
Verfasst: Sonntag 22. Oktober 2006, 18:39
von Shana
Danke
Hat bestens geklappt.