Domanda

Sto realizzando un programma che si adatta idealmente al concetto di procedura guidata; l'utente viene guidato attraverso i passaggi per creare un personaggio per un gioco.

Tuttavia, mi sto rendendo conto che i limiti della procedura guidata stanno rendendo difficile la progettazione di "eleganti". flusso logico. Ad esempio, poiché tutte le pagine della procedura guidata sono state inizializzate contemporaneamente, non posso avere i valori inseriti in una pagina disponibili per la successiva. Devo mettere un pulsante su ogni pagina per ottenere i valori da una pagina precedente anziché semplicemente compilare automaticamente i campi.

Ho pensato ad alternative all'uso della procedura guidata. Penso che l'idea migliore sia quella di avere alcuni pulsanti su un pannello che cambiano le informazioni su un altro pannello, ad es. una finestra di divisione.

Tuttavia, non riesco a trovare alcuna documentazione in wxPython su come cambiare dinamicamente il pannello. Tutto quello che ho trovato finora è davvero piuttosto statico, quindi l'uso della procedura guidata. Anche il "quotxpython in azione" il libro non lo menziona.

Esistono tutorial per realizzare "pannelli dinamici" o una migliore gestione di un mago?

È stato utile?

Soluzione

Ecco un semplice esempio. In questo modo puoi creare il tuo " wizard " funziona come una macchina a stati finiti in cui gli stati sono pagine diverse inizializzate su richiesta. Inoltre, i dati sono condivisi tra le pagine.

import wx
import wx.lib.newevent


(PageChangeEvent, EVT_PAGE_CHANGE) = wx.lib.newevent.NewEvent()


class Data:
    foo = None
    bar = None


class Page1(wx.Panel):
    def __init__(self, parent, data):
        wx.Panel.__init__(self, parent)
        self.parent = parent
        self.data = data

        sizer = wx.BoxSizer(wx.VERTICAL)
        self.SetSizer(sizer)
        label = wx.StaticText(self, label="Page 1 - foo")
        self.foo = wx.TextCtrl(self)
        goto_page2 = wx.Button(self, label="Go to page 2")

        for c in (label, self.foo, goto_page2):
            sizer.Add(c, 0, wx.TOP, 5)

        goto_page2.Bind(wx.EVT_BUTTON, self.OnPage2)

    def OnPage2(self, event):
        self.data.foo = self.foo.Value
        wx.PostEvent(self.parent, PageChangeEvent(page=Page2))


class Page2(wx.Panel):
    def __init__(self, parent, data):
        wx.Panel.__init__(self, parent)
        self.parent = parent
        self.data = data

        sizer = wx.BoxSizer(wx.VERTICAL)
        self.SetSizer(sizer)
        label = wx.StaticText(self, label="Page 2 - bar")
        self.bar = wx.TextCtrl(self)
        goto_finish = wx.Button(self, label="Finish")

        for c in (label, self.bar, goto_finish):
            sizer.Add(c, 0, wx.TOP, 5)

        goto_finish.Bind(wx.EVT_BUTTON, self.OnFinish)

    def OnFinish(self, event):
        self.data.bar = self.bar.Value
        wx.PostEvent(self.parent, PageChangeEvent(page=finish))


def finish(parent, data):
    wx.MessageBox("foo = %s\nbar = %s" % (data.foo, data.bar))
    wx.GetApp().ExitMainLoop()


class Test(wx.Frame):
    def __init__(self):
        wx.Frame.__init__(self, None)
        self.data = Data()
        self.current_page = None

        self.Bind(EVT_PAGE_CHANGE, self.OnPageChange)
        wx.PostEvent(self, PageChangeEvent(page=Page1))

    def OnPageChange(self, event):
        page = event.page(self, self.data)
        if page == None:
            return
        if self.current_page:
            self.current_page.Destroy()
        self.current_page = page
        page.Layout()
        page.Fit()
        page.Refresh()


app = wx.PySimpleApp()
app.TopWindow = Test()
app.TopWindow.Show()
app.MainLoop()

Altri suggerimenti

La demo di wxPython ha un esempio di "quotazione dinamica"; procedura guidata. Le pagine sostituiscono GetNext () e GetPrev () per mostrare le pagine in modo dinamico. Questo mostra la tecnica di base; puoi estenderlo per aggiungere e rimuovere pagine, cambiare pagine al volo e riorganizzare le pagine in modo dinamico.

La classe dei maghi è solo per comodità. Puoi modificarlo o creare la tua implementazione. Uno stile che oggi sembra popolare è l'uso di una presentazione basata su HTML; puoi emularlo con il controllo wxHtml o con il controllo IEHtmlWindow se l'app è solo Windows.

Potresti provare a utilizzare un motore del flusso di lavoro come WFTK . In questo caso particolare, l'autore ha svolto del lavoro su app basate su wx usando WFTK e probabilmente può indirizzarti ad esempi.

Mi sbarazzerei del mago nel suo insieme. Sono le cose più spiacevoli che abbia mai usato.

Il problema che richiede un'applicazione guidata in cui si fa clic su "Avanti" è forse un problema in cui è possibile applicare un'interfaccia utente migliore in modo leggermente diverso. Invece di aprire una finestra di dialogo con il fastidioso pulsante "successivo". Fai questo:

Visualizza una pagina. Quando l'utente inserisce le informazioni nella pagina, estenderle o accorciarle in base all'input. Se l'applicazione ha bisogno di eseguire alcune elaborazioni per continuare, ed è impossibile ripristinare successivamente, scrivere una nuova pagina o disabilitare la sezione precedente della pagina corrente. Quando non hai più bisogno di alcun input da parte dell'utente o l'app è finita, puoi mostrare un pulsante o abilitarne uno esistente.

Non intendo che dovresti implementare tutto nel browser. Crea semplicemente un contenitore scorrevole che può contenere pulsanti ed etichette in un elenco semplice.

Vantaggio: l'utente può semplicemente fare clic su una scheda e si consiglia di mettere tutta l'elaborazione alla fine del riempimento della pagina.

Va ??notato che una procedura guidata dovrebbe essere l'interfaccia per le attività a più passaggi eseguite di rado. La procedura guidata viene utilizzata per guidare l'utente attraverso qualcosa che non capiscono davvero, perché non lo fanno quasi mai.

E se alcuni utenti potrebbero svolgere l'attività frequentemente, si desidera fornire a quegli utenti esperti un'interfaccia leggera per fare la stessa cosa, anche se meno si spiega da sé.

Vedi: Linee guida per l'esperienza utente di Windows Vista - Principali violazioni

  

Wizards

     

Considera prima le alternative leggere, come finestre di dialogo, attività   riquadri o singole pagine. I maghi lo sono   un'interfaccia utente pesante, utilizzata al meglio per più passaggi   compito eseguito raramente. Non   devi usare i maghi & # 8212; puoi fornire   informazioni utili e assistenza in   qualsiasi interfaccia utente.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top