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
Wizard -> gleiche Seite nochmal anzeigen
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
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
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:
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
Hallo Shana,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
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.
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.
Mit SetNextPage() habe ich es auch schon versucht, das klappt allerdings auch nicht.
Shana: versuch doch mal, diese Zeile in die __init__-Funktion zu schreiben:
danach noch eine Funktion page_changing die z.B. so aussieht:
bei mir hat das so geklappt, die Seite wird nicht gewechselt. Ich hoffe, das funktioniert auch bei dir.
Gruss Crush
Code: Alles auswählen
self.Bind(wx.wizard.EVT_WIZARD_PAGE_CHANGING, self.page_changing)
Code: Alles auswählen
def page_changing(self, evt):
print 'die seite wird wegen dem "evt.Veto()" nicht gewechselt!'
evt.Veto()
Gruss Crush
Danke
Hat bestens geklappt.
Hat bestens geklappt.