Wizard -> gleiche Seite nochmal anzeigen

Plattformunabhängige GUIs mit wxWidgets.
Antworten
Benutzeravatar
Shana
User
Beiträge: 28
Registriert: Dienstag 22. August 2006, 11:58
Wohnort: Bremen
Kontaktdaten:

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
Crush
User
Beiträge: 44
Registriert: Montag 1. Mai 2006, 11:32

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. :D

Crush
Benutzeravatar
Shana
User
Beiträge: 28
Registriert: Dienstag 22. August 2006, 11:58
Wohnort: Bremen
Kontaktdaten:

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
Francesco
User
Beiträge: 824
Registriert: Mittwoch 1. Dezember 2004, 12:35
Wohnort: Upper Austria

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. :)
Benutzeravatar
Shana
User
Beiträge: 28
Registriert: Dienstag 22. August 2006, 11:58
Wohnort: Bremen
Kontaktdaten:

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.
Crush
User
Beiträge: 44
Registriert: Montag 1. Mai 2006, 11:32

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
Benutzeravatar
Shana
User
Beiträge: 28
Registriert: Dienstag 22. August 2006, 11:58
Wohnort: Bremen
Kontaktdaten:

Danke :D

Hat bestens geklappt.
Antworten