Εναλλακτικές λύσεις για έναν οδηγό

ψήφοι
3

Κάνω ένα πρόγραμμα που ταιριάζει με την ιδέα οδηγό ιδανικά? ο χρήστης περπάτησε μέσα από τα βήματα για να δημιουργήσετε ένα χαρακτήρα για ένα παιχνίδι.

Ωστόσο, είμαι συνειδητοποιώντας ότι οι περιορισμοί του οδηγού που καθιστά δύσκολο να σχεδιάσει «κομψή» λογική ροή. Για παράδειγμα, επειδή όλες οι σελίδες του οδηγού initalized την ίδια στιγμή, δεν μπορώ να έχω τις τιμές εισήλθε σε μια σελίδα που διαθέτει η επόμενη. Θα πρέπει να βάλετε ένα κουμπί σε κάθε σελίδα για να πάρει τις τιμές από την προηγούμενη σελίδα και όχι απλά να έχουν πεδία συμπληρώνονται αυτόματα.

Έχω σκεφτεί εναλλακτικές λύσεις για τη χρήση του οδηγού. Νομίζω ότι η καλύτερη ιδέα είναι να έχουμε μερικά κουμπιά σε ένα πίνακα που αλλάζουν τις πληροφορίες σε ένα άλλο πίνακα, π.χ. ένα παράθυρο splitter.

Ωστόσο, δεν μπορώ να βρω καμία τεκμηρίωση wxPython για το πώς να αλλάζουν δυναμικά τον πίνακα. Ό, τι έχω βρει μέχρι στιγμής είναι πραγματικά αρκετά στατική, ως εκ τούτου, η χρήση του οδηγού. Ακόμη και η «wxPython σε δράση» βιβλίο δεν το αναφέρω.

Υπάρχουν tutorials για την κατασκευή «δυναμική πάνελ» ή καλύτερης διαχείρισης του οδηγού εκεί;

Δημοσιεύθηκε 22/10/2008 στις 01:54
πηγή χρήστη
Σε άλλες γλώσσες...                            


5 απαντήσεις

ψήφοι
5

Εδώ είναι ένα απλό παράδειγμα. Με αυτό τον τρόπο μπορείτε να κάνετε σας «οδηγό» το έργο σαν μια μηχανή πεπερασμένων καταστάσεων όπου τα κράτη είναι διαφορετικές σελίδες που έχουν προετοιμαστεί με τη ζήτηση. Επίσης, τα δεδομένα είναι κοινή μεταξύ των σελίδων.

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()
Απαντήθηκε 22/10/2008 στις 07:04
πηγή χρήστη

ψήφοι
0

Θα μπορούσατε να δοκιμάστε να χρησιμοποιήσετε μια μηχανή ροής εργασίας, όπως WFTK . Στη συγκεκριμένη περίπτωση συγγραφέας έχει κάνει κάποιες εργασίες στο wx-based εφαρμογές που χρησιμοποιούν WFTK και μπορεί πιθανώς να σας κατευθύνει σε παραδείγματα.

Απαντήθηκε 22/10/2008 στις 11:06
πηγή χρήστη

ψήφοι
1

Το demo wxPython έχει ένα παράδειγμα μιας «δυναμικής» του οδηγού. Σελίδες υπερισχύουν GetNext () και GetPrev () για να δείξει σελίδες δυναμικά. Αυτό δείχνει την βασική τεχνική? μπορείτε να το επεκτείνει για να προσθέσετε και να αφαιρέσετε σελίδες, να αλλάζουν σελίδες on the fly, και να αναδιατάξετε σελίδες δυναμικά.

Η κατηγορία οδηγός είναι απλά μια ευκολία, όμως. Μπορείτε να τροποποιήσετε ή να δημιουργήσετε τη δική σας εφαρμογή. Ένα στυλ που φαίνεται δημοφιλής στις μέρες μας είναι να χρησιμοποιήσετε ένα HTML με βάση την παρουσίαση? μπορείτε να μιμηθεί αυτό με τον έλεγχο wxHtml, ή τον έλεγχο IEHtmlWindow αν η εφαρμογή σας είναι μόνο για Windows.

Απαντήθηκε 29/10/2008 στις 15:09
πηγή χρήστη

ψήφοι
0

Θα ήθελα να απαλλαγούμε από οδηγό στο σύνολό της. Είναι τα πιο δυσάρεστα πράγματα που έχω χρησιμοποιήσει ποτέ.

Το πρόβλημα που απαιτεί έναν οδηγό εφαρμογής όπου κάνετε κλικ στο κουμπί «επόμενο» είναι ίσως ένα πρόβλημα όπου θα μπορούσε να εφαρμοστεί ένα καλύτερο περιβάλλον εργασίας χρήστη σε ένα λίγο διαφορετικό τρόπο. Αντί να φέρει ένα διάλογο με το ενοχλητικό «επόμενη» -button. Κάνε αυτό:

Φέρτε μια σελίδα. Όταν ο χρήστης εισάγει τις πληροφορίες στη σελίδα, να παρατείνει ή να συντομεύσει το σύμφωνα με την είσοδο. Εάν η αίτησή σας θα πρέπει να κάνετε κάποια επεξεργασία για να συνεχίσει, και είναι αδύνατο να επανέλθει μετά από αυτό, να γράψει μια νέα σελίδα ή να απενεργοποιήσετε την προηγούμενη ενότητα της τρέχουσας σελίδας. Όταν δεν χρειάζεται καμία εισαγωγή από το χρήστη πια ή η εφαρμογή έχει ολοκληρωθεί, μπορείτε να δείτε ένα κουμπί ή να ενεργοποιήσετε ένα υπάρχον τέτοιο.

Δεν σημαίνει ότι θα πρέπει όλα να εφαρμόσουν το πρόγραμμα περιήγησης. Κάντε απλώς κύλιση δοχείο που μπορεί να περιέχει κουμπιά και ετικέτες σε μια επίπεδη λίστα.

Όφελος: Ο χρήστης μπορεί απλά κάντε κλικ σε μια καρτέλα, και σας ενθαρρύνουμε να βάλετε όλη την επεξεργασία στο τέλος της πλήρωσης της σελίδας.

Απαντήθηκε 29/10/2008 στις 16:14
πηγή χρήστη

ψήφοι
0

Θα πρέπει να σημειωθεί ότι ένας οδηγός θα πρέπει να είναι η διεπαφή για multi-βήμα, συχνά-εκτελούνται εργασίες. Ο οδηγός χρησιμοποιείται για να καθοδηγήσει το χρήστη μέσω κάτι που πραγματικά δεν καταλαβαίνω, γιατί σχεδόν ποτέ δεν το κάνουν.

Και αν κάποιοι χρήστες μπορεί να κάνουν το καθήκον συχνά, θέλετε να δώσετε εκείνους τους χρήστες δύναμης ένα ελαφρύ περιβάλλον εργασίας για να κάνουν το ίδιο πράγμα - ακόμα κι αν είναι λιγότερο αυτονόητα.

Δείτε: Windows Vista Οδηγίες εμπειρία του χρήστη - Αρχή Παραβάσεις

Μάγοι

Σκεφτείτε ελαφρύ εναλλακτικές λύσεις πρώτη, όπως παράθυρα διαλόγου, παράθυρα εργασιών, ή μεμονωμένες σελίδες. Μάγοι είναι ένα βαρύ UI, καλύτερα να χρησιμοποιείται για multi-βήμα, σπάνια εκτελείται το έργο. Δεν χρειάζεται να χρησιμοποιήσετε οδηγούς, μπορείτε να παρέχετε χρήσιμες πληροφορίες και βοήθεια σε κάθε UI.

Απαντήθηκε 29/10/2008 στις 16:38
πηγή χρήστη

Cookies help us deliver our services. By using our services, you agree to our use of cookies. Learn more